思路一:
递归写法
/**
* Definition for a binary tree node.
* public class TreeNode {
* int val;
* TreeNode left;
* TreeNode right;
* TreeNode(int x) { val = x; }
* }
*/
class Solution {
List<Integer>list1 = new LinkedList<Integer>();
public List<Integer> postorderTraversal(TreeNode root) {
if(root==null){
return list1;
}
postorderTraversal(root.left);
postorderTraversal(root.right);
list1.add(root.val);
return list1;
}
}
思路二:
迭代写法
运用两个栈还原递归
/**
* Definition for a binary tree node.
* public class TreeNode {
* int val;
* TreeNode left;
* TreeNode right;
* TreeNode(int x) { val = x; }
* }
*/
class Solution {
List<Integer>list1 = new LinkedList<Integer>();
public List<Integer> postorderTraversal(TreeNode root) {
Stack<TreeNode>stk1 = new Stack<TreeNode>();
Stack<TreeNode>stk2 = new Stack<TreeNode>();
if(root==null){
return list1;
}
stk1.push(root);
while(!stk1.empty()){
stk2.push(stk1.pop());
if(stk2.peek().left!=null){
stk1.push(stk2.peek().left);
}
if(stk2.peek().right!=null){
stk1.push(stk2.peek().right);
}
}
while(!stk2.empty()){
list1.add(stk2.pop().val);
}
return list1;
}
}