参考:https://blog.csdn.net/xiaoxiaxiaen/article/details/74745747
1.前序遍历:
递归版:
public void preOrder(TreeNode root){
if(root==null) return;
System.out.print(root.val+" ");
preOrder(root.left);
preOrder(root.right);
}
迭代版:
//非递归版(根节点先不入栈)
public void preOrder2(TreeNode root){
if(root==null) return;
Stack<TreeNode> s=new Stack<>();
while(root!=null||!s.isEmpty()){
while(root!=null){
System.out.print(root.val+" ");
s.push(root);
root=root.left;
}
if(!s.isEmpty()){
root=s.pop();
root=root.right;
}
}
}
//非递归版(根节点先入栈)
public void preOrder3(TreeNode root){
if(root==null) return;
Stack<TreeNode> s=new Stack<>();
s.push(root);
while(!s.isEmpty()){
TreeNode node=s.pop();
System.out.print(node.val+" ");
if(node.right!=null){
s.push(node.right);
}
if(node.left!=null){
s.push(node.left);
}
}
}
2.中序遍历
递归:
public void inOrder(TreeNode root){
if(root==null) return;
inOrder(root.left);
System.out.print(root.val+" ");
inOrder(root.right);
}
迭代:
public void inOrder2(TreeNode root){
if(root==null) return;
Stack<TreeNode> s=new Stack<>();
while(root!=null||!s.isEmpty()){
while(root!=null){
s.push(root);
root=root.left;
}
if(!s.isEmpty()){
root=s.pop();
System.out.print(root.val+" ");
root=root.right;
}
}
}
3.后序遍历
递归:
public void backOrder(TreeNode root){
if(root==null) return;
backOrder(root.left);
backOrder(root.right);
System.out.print(root.val+" ");
}
迭代:
public void backOrder2(TreeNode root){
if(root==null) return;
Stack<TreeNode> s=new Stack<>();
Stack<TreeNode> temp=new Stack<>();
while(root!=null||!s.isEmpty()){
while(root!=null){
temp.push(root);
s.push(root);
root=root.right;
}
if(!s.isEmpty()){
root=s.pop();
root=root.left;
}
}
while(!temp.isEmpty()){
System.out.print(temp.pop().val+" ");
}
}