思路:
递归
迭代(中等、难)
代码:
第一版
class Solution {
public List<Integer> postorderTraversal(TreeNode root) {
Deque<TreeNode> stack=new LinkedList<>();
LinkedList<Integer> res=new LinkedList<>();
if(root==null){
return res;
}
stack.addFirst(root);
//迭代的循环条件往往是判断栈是否为空
while(!stack.isEmpty()){
//只要是Deque删除都是remove,无论它是ArrayList还是LinkedList
TreeNode node=stack.removeLast();
res.addFirst(node.val);
if(node.left!=null){
stack.addLast(node.left);
}
//先进后出,则右节点后进先出
//最后右节点先加入res中,顺序比左节点靠右,顺序正确
if(node.right!=null){
stack.addLast(node.right);
}
}
return res;
}
}
第二版:
class Solution {
public List<Integer> postorderTraversal(TreeNode root) {
List<Integer> res=new ArrayList<>();
Deque<