一、前序遍历
访问顺序:先根节点,再左子树,最后右子树;上图的访问结果为:GDAFEMHZ。
1)递归实现
public voidpreOrderTraverse1(TreeNode root) {if (root != null) {
System.out.print(root.val+ "->");
preOrderTraverse1(root.left);
preOrderTraverse1(root.right);
}
}
2)非递归实现
public voidpreOrderTraverse2(TreeNode root) {
Stack stack = new Stack<>();
TreeNode node=root;while (node != null || !stack.empty()) {if (node != null) {
System.out.print(node.val+ "->");
stack.push(node);
node=node.left;
}else{
TreeNode tem=stack.pop();
node=tem.right;
}
}
}
二、中序遍历
访问顺序:先左子树,再根节点,最后右子树;上图的访问结果为:ADEFGHMZ。
1)递归实现
public voidinOrderTraverse(TreeNode root) {if (root != null) {
inOrderTraverse(root.left);
System.out.print(root.val+ "->");
inOrderTraverse(root.right);
}
}
2)非递归实现
public voidinOrderTraverse(TreeNode root) {
Stack stack = new Stack<>();
TreeNode node=root;while (node != null || !stack.isEmpty()) {if (node != null) {
stack.push(node);
node=node.left;
}else{
TreeNode tem=stack.pop();
System.out.print(tem.val+ "->");
node=tem.right;
}
}
}
三、后序遍历
访问顺序:先左子树,再右子树,最后根节点,上图的访问结果为:AEFDHZMG。
1)递归实现
public voidpostOrderTraverse(TreeNode root) {if (root != null) {
postOrderTraverse(root.left);
postOrderTraverse(root.right);
System.out.print(root.val+ "->");
}
}
2)非递归实现
public voidpostOrderTraverse(TreeNode root) {
TreeNode cur, pre= null;
Stack stack = new Stack<>();
stack.push(root);while (!stack.empty()) {
cur=stack.peek();if ((cur.left == null && cur.right == null) || (pre != null && (pre == cur.left || pre ==cur.right))) {
System.out.print(cur.val+ "->");
stack.pop();
pre=cur;
}else{if (cur.right != null)
stack.push(cur.right);if (cur.left != null)
stack.push(cur.left);
}
}
}
四、层次遍历
访问结果:GDMAFHZE。
public voidlevelOrderTraverse(TreeNode root) {if (root == null) {return;
}
Queue queue = new LinkedList();
queue.add(root);while (!queue.isEmpty()) {
TreeNode node=queue.poll();
System.out.print(node.val+ "->");if (node.left != null) {
queue.add(node.left);
}if (node.right != null) {
queue.add(node.right);
}
}
}