二叉树的后序遍历

来源:互联网 发布:南风知我意结局 编辑:程序博客网 时间:2024/05/13 08:22
class Solution{//递归实现    ArrayList<Integer> list = new ArrayList<Integer>();    public ArrayList<Integer> postorderTraversal2(TreeNode root) {              //后序遍历        if(root!=null){        postorderTraversal2(root.left);        postorderTraversal2(root.right);        list.add(root.val);        }        return list;    }    }



class Solution { //循环实现    public ArrayList<Integer> postorderTraversal(TreeNode root) {        ArrayList<Integer> list = new ArrayList<Integer>();        Stack<TreeNode> stack = new Stack<TreeNode>();                TreeNode cur = root,visit = null;//指向当前节点        while(cur != null || !stack.isEmpty()){        //一直添加左子树        if(cur != null){        stack.add(cur);        cur = cur.left;        }else{        cur = stack.peek();        //右子树被访问过则添加        if(cur.right == null || cur.right == visit){        cur = stack.pop();        list.add(cur.val);        visit = cur;        cur = null;        }//右子树没被访问过        else{        cur = cur.right;        }                }         }                return list;    }}

原创粉丝点击