https://leetcode.com/problems/binary-tree-postorder-traversal/
二叉树的后序遍历,递归调用还是和前面的思路一样。迭代的方法这里使用了两个栈,一个栈用于 前–左–右 的遍历该层时的临时存储栈,另外一个用于存储结果。时间复杂度是 O(n),空间复杂度也是 O(n)。
同时,这两个链接也有很多好的方法,大家一起学习一下。
http://blog.csdn.net/linhuanmars/article/details/22009351
http://www.programcreek.com/2012/12/leetcode-solution-of-iterative-binary-tree-postorder-traversal-in-java/
solution 1 : recursive
/**
* Definition for a binary tree node.
* public class TreeNode {
* int val;
* TreeNode left;
* TreeNode right;
* TreeNode(int x) { val = x; }
* }
*/
public class Solution {
public List<Integer> postorderTraversal(TreeNode root) {
List<Integer> result = new ArrayList<>();
helper(root, result);
return result;
}
public void helper(TreeNode root, List<Integer> result) {
if (root == null) return;
helper(root.left, result);
helper(root.right, result);
result.add(root.val);
}
}
solution 2 : iterative
/**
* Definition for a binary tree node.
* public class TreeNode {
* int val;
* TreeNode left;
* TreeNode right;
* TreeNode(int x) { val = x; }
* }
*/
public class Solution {
public List<Integer> postorderTraversal(TreeNode root) {
List<Integer> result = new ArrayList<>();
Stack<TreeNode> stack1 = new Stack<>();
Stack<TreeNode> stack2 = new Stack<>();
if (root == null) return result;
stack1.push(root);
while (!stack1.isEmpty()) {
root = stack1.pop();
stack2.push(root);
if (root.left != null)
stack1.push(root.left);
if (root.right != null)
stack1.push(root.right);
}
while (!stack2.isEmpty()) {
root = stack2.pop();
result.add(root.val);
}
return result;
}
}