解法一:迭代
- 中左右的stack输入次序,进行中右左的二叉树模拟从头插入list中,得到一个左右中的list
class Solution {
public List<Integer> postorderTraversal(TreeNode root) {
List<Integer> list=new ArrayList();
Stack<TreeNode> stack=new Stack();
if(root!=null){
stack.push(root);
}
while(!stack.isEmpty()){
TreeNode node=stack.pop();
list.add(0,node.val);
if(node.left!=null){
stack.push(node.left);
}
if(node.right!=null){
stack.push(node.right);
}
}
return list;
}
}
解法二:递归
class Solution {
List<Integer> list;
public List<Integer> postorderTraversal(TreeNode root) {
list=new ArrayList();
postorder(root);
return list;
}
public void postorder(TreeNode root){
if(root==null){
return;
}
postorder(root.left);
postorder(root.right);
list.add(root.val);
}
}