二叉树的前序、中序、后序遍历(非递归版)

递归本质上就是栈的调用

1. 前序遍历

public List<Integer> preorderTraversal(TreeNode root) {
        List<Integer> list=new ArrayList<>();
        if(root==null){
            return list;
        }
        Stack<TreeNode> stack=new Stack<>();
        stack.push(root);
        TreeNode temp=null;
        while(!stack.isEmpty()){
            temp=stack.pop();
            list.add(temp.val);
            if(temp.right!=null){
                stack.push(temp.right);
            }
            if(temp.left!=null){
                stack.push(temp.left);
            }
        }
        return list;
    }

2. 中序遍历

 public List<Integer> inorderTraversal(TreeNode root) {
        List<Integer> res=new ArrayList<>();
        if(root==null){
            return res;
        }
        Stack<TreeNode> stack=new Stack<>();
        TreeNode temp=root;

        while(true){
            while(temp!=null){
                stack.push(temp);
                temp=temp.left;
            }
            TreeNode cur=stack.pop();
            res.add(cur.val);
            if(cur.right!=null){
                temp=cur.right;
            }else{
                temp=null;
            }
            if(temp==null && stack.isEmpty()){
                break;
            }
        }
        return res;

    }

 

3. 后续遍历

 public List<Integer> postorderTraversal(TreeNode root) {
        List<Integer> res=new ArrayList<>();
        if(root==null){
            return res;
        }
        Stack<TreeNode> stack=new Stack<>();
        TreeNode temp=root;
        TreeNode prev=null;
        while(true){
            while(temp!=null){
                stack.push(temp);
                temp=temp.left;
            }
            temp=stack.pop();
            if(temp.right!=null && temp.right!=prev){
                stack.push(temp);
                temp=temp.right;
            }else{
                res.add(temp.val);
                prev=temp;
                temp=null;
            }
            if(temp==null && stack.isEmpty()){
                break;
            }
        }
        return res;

    }

 

posted @ 2021-07-08 17:00  lcy冲冲冲  阅读(43)  评论(0)    收藏  举报