LeetCode二叉树后序遍历
给定一个二叉树,返回它的 后序 遍历。
递归实现:
public List<Integer> postorderTraversal(TreeNode root) {
List<Integer> list = new ArrayList<>();
afterOrder(root,list);
return list;
}
}
public void afterOrder(TreeNode node, List<Integer> list){
if(node == null){
return;
}
if(node.left != null){
afterOrder(node.left,list);
}
if( node.right != null){
afterOrder(node.right,list);
}
list.add(node.val);
}
迭代实现:
//迭代实现
List<Integer> list =new ArrayList<>();
Deque<TreeNode> que = new LinkedList<>();
TreeNode p =null;//用来记录上一节点
while (root != null || !que.isEmpty()){
// root = root.left;
while( root != null){
que.push(root);
root = root.left;
}
root = que.peek();
if(root.right == null || root.right == p){
list.add(root.val);
que.pop();
p = root;
root = null;
}else{
root = root.right;
}
}
return list;