题目
Given a binary tree, return the post order traversal of its nodes' values.
后序遍历,递归、迭代两种方式
1 练习,理解,练习,理解
2 递归很简单
3 迭代后续最难。需要两个stack。网上看到很多种写法,为了还原栈的工作过程,我觉得理解一下是可以的,但是要还原不容易,所以这里选取了一个最容易记忆的方式来写。一看代码,就清楚了。
1 递归
public class Solution {
public ArrayList<Integer> postorderTraversal(TreeNode root) {
ArrayList<Integer> ans = new ArrayList<Integer>();
useme(root,ans);
return ans;
}
public void useme(TreeNode root, ArrayList<Integer> ans){
if(root!=null){
useme(root.left,ans);
useme(root.right,ans);
ans.add(root.val);
}
}
}
2 迭代
public class Solution {
public ArrayList<Integer> postorderTraversal(TreeNode root) {
ArrayList<Integer> ans = new ArrayList<Integer>();
LinkedList<TreeNode> stack = new LinkedList<TreeNode>();
LinkedList<TreeNode> output = new LinkedList<TreeNode>();
if(root==null){
return ans;
}
stack.push(root);
while(!stack.isEmpty()){
TreeNode cur = stack.pop();
output.push(cur);
if(cur.left!=null){
stack.push(cur.left);
}
if(cur.right!=null){
stack.push(cur.right);
}
}
while(!output.isEmpty()){
TreeNode cur = output.pop();
ans.add(cur.val);
}
return ans;
}
}