二叉树的后序遍历(递归与非递归)

非递归

public class Problem {
    public List<Integer> postorderTraversal(TreeNode root){
        List<Integer> list = new LinkedList<>();
        if(root==null){
            return list;
        }
        Stack<TreeNode> stack=new Stack<>();
        Stack<TreeNode> output=new Stack<>();
        TreeNode node =root;
        while (node!=null||!stack.isEmpty()){
            while (node!=null){
                stack.push(node);
                output.push(node);
                node=node.right;
            }
            if(!stack.isEmpty()){
                TreeNode temp = stack.pop();
                node=temp.left;
            }

        }
        while (!output.isEmpty()){
            list.add(output.pop().val);
        }
        return list;
    }
}

递归

public class Problem {
    public List<Integer> postorderTraversal(TreeNode root){
        List<Integer> list = new LinkedList<>();
        if(root==null){
            return list;
        }
        postorderTraversal(root,list);
        return list;
    }
    public void postorderTraversal(TreeNode root,List<Integer> result){
        if(root==null){
            return;
        }
        postorderTraversal(root.left,result);
        postorderTraversal(root.right,result);
        result.add(root.val);
    }
}
posted @ 2018-03-28 17:21  baixiaoshuai  阅读(172)  评论(0编辑  收藏  举报