Binary Tree Postorder Traversal

来源:互联网 发布:mac定制水漾轻盈粉底 编辑:程序博客网 时间:2024/05/17 03:18

Given a binary tree, return the postorder traversal of its nodes' values.

For example:
Given binary tree {1,#,2,3},

   1    \     2    /   3

return [3,2,1].

解法:用栈来做,先将父节点入栈,再将右孩子入栈,左孩子入栈,同时在回溯的时候,即出栈后,要保存之前访问的孩子节点pre,否则会重复

将孩子节点入栈。

public class Solution {    public static List<Integer> postorderTraversal(TreeNode root){List<Integer> result = new ArrayList<Integer>();if(root == null)        return result;        Stack<TreeNode> stack = new Stack<TreeNode>();        TreeNode l = root, pre = null;        stack.push(l);        while(!stack.empty())        {        l = stack.peek();        if((l.left == null && l.right == null) || (pre != null && (pre == l.left || pre == l.right)))        {        result.add(l.val);        stack.pop();        pre = l;        }        else        {        if(l.right != null)        stack.push(l.right);        if(l.left != null)        stack.push(l.left);        }        }        return result;}}


0 0