这棵树
- 前序遍历:5 5 3 9 1 7 6 2 4 1
- 中序遍历:9 3 1 5 5 2 6 4 7 1
- 后序遍历:9 1 3 5 2 4 6 1 7 5
- 层次遍历:5 5 7 3 6 1 9 1 2 4
前序遍历
递归实现
// 前序遍历(递归)
public static void preOrder(BinaryTree bt) {
if (null != root) {
System.out.print(bt.val + " ");
preOrder(bt.left);
preOrder(bt.right);
}
}
非递归实现
- 利用栈,每次根节点入栈之后出栈,再依次将右子树节点和左子树节点入栈,直到栈空。
// 前序遍历(非递归:利用栈)
public static void preOrder1(BinaryTree bt) {
if (bt != null) {
Stack<BinaryTree> tmp = new Stack<>();
tmp.push(bt);
while (!tmp.isEmpty()) {
BinaryTree b = tmp.pop();
System.out.print(b.val + " ");
// 注意:先将右子树孩子压入栈,再将左子树压入栈
if (b.right != null) {
tmp.push(b.right);
}
if (b.left != null) {
tmp.push(b.left);
}
}
}
}
中序遍历
递归实现
// 中序遍历(递归)
public static void inOrder(BinaryTree bt) {
if (bt != null) {
inOrder(bt.left);
System.out.print(bt.val + " ");
inOrder(bt.right);
}
}
非递归实现
后序遍历
递归实现
// 后序遍历(递归)
public static void postOrder(BinaryTree bt) {
if (bt != null) {
postOrder(bt.left);
postOrder(bt.right);
System.out.print(bt.val + " ");
}
}
非递归实现
层次遍历
// 层次遍历
public static void levelOrder(BinaryTree bt) {
if (bt != null) {
Queue<BinaryTree> tmp = new LinkedList<>();
tmp.add(bt);
while (!tmp.isEmpty()) {
BinaryTree b = tmp.poll();
System.out.print(b.val + " ");
if (b.left != null) {
tmp.add(b.left);
}
if (b.right != null) {
tmp.add(b.right);
}
}
}
}
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。