Binary Tree Postorder Traversal

recursion programming

 1 public class Solution {
 2     public ArrayList<Integer> postorderTraversal(TreeNode root) {
 3         // IMPORTANT: Please reset any member data you declared, as
 4         // the same Solution instance will be reused for each test case.
 5         ArrayList<Integer> result = new ArrayList<Integer>();
 6         traversal(result, root);
 7         return result;
 8     }
 9     private void traversal(ArrayList<Integer> result, TreeNode node)
10     {
11         if(node == null)
12             return; 
13         traversal(result, node.left);
14         traversal(result, node.right);
15         result.add(node.val);
16     }
17 }
 1 public ArrayList<Integer> postorderTraversal(TreeNode root) {
 2         // IMPORTANT: Please reset any member data you declared, as
 3         // the same Solution instance will be reused for each test case.
 4         ArrayList<Integer> result = new ArrayList<Integer>();
 5         if(root == null){
 6             return result;
 7         }
 8         
 9         Stack<TreeNode> stack = new Stack<TreeNode>();
10         TreeNode cur = null, pre = null;
11         stack.push(root);
12         
13         while(!stack.empty()){
14             cur = stack.peek();
15             if((cur.left == null && cur.right == null) ||
16             ((pre != null) && (cur.left == pre || cur.right == pre))){
17                 result.add(cur.val);
18                 pre = cur;
19                 stack.pop();
20             } else {
21                 if(cur.right != null){
22                     stack.push(cur.right);
23                 }
24                 if(cur.left != null){
25                     stack.push(cur.left);
26                 }
27             }
28             
29         }
30         
31         return result;
32     }
原文地址:https://www.cnblogs.com/jasonC/p/3414160.html