[Leetcode] Binary Tree Postorder Traversal
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]
.
Note: Recursive solution is trivial, could you do it iteratively?
Solution 1: 非递归
1 /** 2 * Definition for binary tree 3 * public class TreeNode { 4 * int val; 5 * TreeNode left; 6 * TreeNode right; 7 * TreeNode(int x) { val = x; } 8 * } 9 */ 10 public class Solution { 11 public List<Integer> postorderTraversal(TreeNode root) { 12 List<Integer> result = new ArrayList<Integer>(); 13 if (root == null) 14 return result; 15 Stack<TreeNode> s = new Stack<TreeNode>(); 16 TreeNode node = root, prev = root; 17 while (node != null || !s.isEmpty()) { 18 while (node != null) { 19 s.add(node); 20 node = node.left; 21 } 22 if (s.size() > 0) { 23 TreeNode temp = s.peek().right; 24 if(temp!=null&&temp!=prev){ 25 node=temp; 26 }else if(temp==prev||temp==null){ 27 node=s.pop(); 28 result.add(node.val); 29 prev=node; 30 node=null; 31 } 32 } 33 } 34 return result; 35 } 36 }
Solution 2: 递归
1 /** 2 * Definition for binary tree 3 * public class TreeNode { 4 * int val; 5 * TreeNode left; 6 * TreeNode right; 7 * TreeNode(int x) { val = x; } 8 * } 9 */ 10 public class Solution { 11 public List<Integer> postorderTraversal(TreeNode root) { 12 List<Integer> result=new ArrayList<Integer>(); 13 myPostorderTraversal(root,result); 14 return result; 15 } 16 17 private void myPostorderTraversal(TreeNode root, List<Integer> result) { 18 // TODO Auto-generated method stub 19 if(root!=null){ 20 myPostorderTraversal(root.left, result); 21 myPostorderTraversal(root.right, result); 22 result.add(root.val); 23 } 24 } 25 }