二叉树的遍历:
力扣144,94,145二叉树的三种遍历方式(递归与迭代),迭代法用栈来做。
1.前序遍历的话是
if(node.right!=null){
stack.push(node.right);
}
if(node.left!=null){
stack.push(node.left);
}
2.中序遍历的话是,需要用辅助节点temp来做
TreeNode temp=root;
Stack<TreeNode> stack = new Stack<>();
while (temp!=null||!stack.isEmpty()){
if(temp!=null){
stack.push(temp);
temp=temp.left;
}else{
temp=stack.pop();
res.add(temp.val);
temp=temp.right;
}
}
return res;
3.如果是后序遍历的话,也是使用栈来做,先push左,再push右,最后把结果反转返回即可
if(root==null){
return res;
}
Stack<TreeNode> stack = new Stack<>();
stack.push(root);
while (!stack.isEmpty()){
TreeNode node = stack.pop();
res.add(node.val);
if(node.left!=null){
stack.push(node.left);
}
if(node.right!=null){
stack.push(node.right);
}
}
Collections.reverse(res);
4.层序遍历的话就比较简单了,用链表来做
Deque<TreeNode> queue = new LinkedList<TreeNode>();
queue.addLast(root);
while (!queue.isEmpty()){
List<Integer>singleRes=new ArrayList<Integer>();
int size=queue.size();
for(int i=0;i<size;i++){
TreeNode node = queue.pollFirst();
singleRes.add(node.val);
if(node.left!=null){
queue.addLast(node.left);
}
if(node.right!=null){
queue.addLast(node.right);
}
}
res.add(singleRes);
}
5.二叉树按最右视角拍照(将内层for循环的第一次遍历结果加入结果集即可)
Deque<TreeNode>queue=new LinkedList<TreeNode>();
queue.addLast(root);
while (!queue.isEmpty()){
int size=queue.size();
for(int i=0;i<size;i++) {
TreeNode node = queue.pollFirst();
if(i==0){
res.add(node.val);
}
if(node.right!=null){
queue.addLast(node.right);
}
if(node.left!=null){
queue.addLast(node.left);
}
}
}
return res;