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;
}
}