二叉树的先序、中序、后序遍历 递归、迭代实现
递归:
先序
public void PreOrder(TreeNode root){
if(root == null) return;
System.out.println(root.val);
if(root.left != null ){
PreOrder(root.left);
}
if(root.right != null){
PreOrder(root.right);
}
}
中序:
public void InOrder(TreeNode root){
if(root == null) return;
if(root.left != null){
InOrder(root.left);
}
System.out.println(root.val);
if(root.right != null){
InOrder(root.right);
}
}
后序:
public void BeOrder(TreeNode root){
if(root == null) return;
if(root.left != null){
BeOrder(root.left);
}
if(root.right != null){
BeOrder(root.right);
}
System.out.println(root.val);
}
迭代实现:
先序:
public void PreOrder(TreeNode root){
//List<Integer> list = new ArrayList<>();
Stack<TreeNode> stack = new Stack<>();
while(root != null || !stack.isEmpty()){
while(root != null){
//list.add(root.val);
System.out.println(root.val);
stack.push(root);
root = root.left;
}
root = stack.pop();
root = root.right;
}
}
中序:
public void InOrder(TreeNode root){
Stack<TreeNode> stack = new Stack<>();
while( root != null || !stack.isEmpty()){
while(root != null){
stack.push(root);
root = root.left;
}
root = stack.pop();
System.out.println(root.val);
root = root.right;
}
}
后序:
public void BeOrder(TreeNode root){
Stack<TreeNode> stack = new Stack<>();
TreeNode pre= null;
while(root != null || !stack.isEmpty()){
while(root != null){
stack.push(root);
root = root.left;
}
root = stack.peek();
if(root.left == null || root.right == p){
System.out.println(root.val);
stack.pop();
p = root;
root = null;
}else{
root = root.right;
}
}
}