LintCode Binary Tree Postorder Traversal 二叉树的后序遍历

来源:互联网 发布:python 计算hurst指数 编辑:程序博客网 时间:2024/06/13 16:12

给出一棵二叉树,返回其节点值的后序遍历。
Given a binary tree, return the postorder traversal of its nodes’ values.

样例
给出一棵二叉树 {1,#,2,3},
1
\
2
/
3
返回 [3,2,1]

解法:
使用两个栈,第二个栈记录第一个栈对应节点被访问的次数。只有当被访问到第三次时,要被输出且不必重新压栈。

/** * Definition of TreeNode: * public class TreeNode { *     public int val; *     public TreeNode left, right; *     public TreeNode(int val) { *         this.val = val; *         this.left = this.right = null; *     } * } */public class Solution {    /**     * @param root: The root of binary tree.     * @return: Postorder in ArrayList which contains node values.     */    public ArrayList<Integer> postorderTraversal(TreeNode root) {        ArrayList<Integer> list = new ArrayList<Integer>();//结果集        Stack<TreeNode> stack = new Stack<TreeNode>();        Stack<Integer> counter = new Stack<Integer>();//记录节点被访问次数        TreeNode p = root;        while(p != null || !stack.empty()) {            while(p != null) {                stack.push(p);                counter.push(1);                p = p.left;            }            if(!stack.empty()) {                p = stack.pop();                int count = counter.pop();                count++;                if(count == 3) {                    list.add(p.val);                    p = null;                    continue;                }                stack.push(p);                counter.push(count);                p = p.right;            }        }        return list;    }}
0 0