首页 > 代码库 > LeetCode: Binary Tree Postorder Traversal 解题报告

LeetCode: Binary Tree Postorder Traversal 解题报告

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?

Show Tags
Have you met this question in a real interview? Yes  No
Discuss

SOLUTION 1:

递归解法

 1 public List<Integer> postorderTraversal1(TreeNode root) { 2         List<Integer> ret = new ArrayList<Integer>(); 3         dfs(root, ret); 4         return ret; 5     } 6      7     // Solution 1: rec 8     public void dfs(TreeNode root, List<Integer> ret) { 9         if (root == null) {10             return;11         }12         13         dfs(root.left, ret);14         dfs(root.right, ret);15         ret.add(root.val);16     }
View Code

 

SOLUTION 2:

/**
     *  后序遍历迭代解法
     *  http://www.youtube.com/watch?v=hv-mJUs5mvU
     *  http://blog.csdn.net/tang_jin2015/article/details/8545457
     *  从左到右的后序 与从右到左的前序的逆序是一样的,所以就简单喽! 哈哈
     *  用另外一个栈进行翻转即可喽
     */

 1 // Solution 2: iterator 2     public List<Integer> postorderTraversal(TreeNode root) { 3         List<Integer> ret = new ArrayList<Integer>(); 4         if (root == null) { 5             return ret; 6         } 7          8         Stack<TreeNode> s = new Stack<TreeNode>(); 9         Stack<Integer> out = new Stack<Integer>();10         11         s.push(root);12         13         while (!s.isEmpty()) {14             TreeNode cur = s.pop();15             out.push(cur.val);16             17             if (cur.left != null) {18                 s.push(cur.left);19             }20             21             if (cur.right != null) {22                 s.push(cur.right);23             }24         }25         26         while (!out.isEmpty()) {27             ret.add(out.pop());28         }29         30         return ret;31     }
View Code

 

GITHUB:

https://github.com/yuzhangcmu/LeetCode_algorithm/blob/master/tree/PostorderTraversal.java

LeetCode: Binary Tree Postorder Traversal 解题报告