Leetcode-Binary Tree Postorder Traversal

LiBlog發表於2014-12-12

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 /**
 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> res = new ArrayList<Integer>();
13         if (root==null) return res;
14 
15         Stack<TreeNode> nStack = new Stack<TreeNode>();
16         Stack<Integer> record = new Stack<Integer>();
17         nStack.push(root);
18         record.push(0);
19 
20         while (nStack.size()!=0){
21             TreeNode cur = nStack.peek();
22             if (cur.left==null && cur.right==null){
23                 res.add(cur.val);
24                 nStack.pop();
25                 record.pop();
26                 continue;
27             }
28 
29             int val = record.peek();
30             if (val==0){
31                 record.pop();
32                 record.push(val+1);
33                 if (cur.left!=null){
34                     nStack.push(cur.left);
35                     record.push(0);
36                 }
37                 continue;
38             }
39 
40             if (val==1){
41                 record.pop();
42                 record.push(val+1);
43                 if (cur.right!=null){
44                     nStack.push(cur.right);
45                     record.push(0);
46                 }
47                 continue;
48             }
49 
50             if (val==2){
51                 res.add(cur.val);
52                 nStack.pop();
53                 record.pop();
54                 continue;
55             }
56         }
57 
58         return res;  
59         
60     }
61 }

 

相關文章