前言
刚开始写算法题时,看到树的题就要烦死了,现在比以前好了点,但也总是忘记思路(毕竟日常真的很少用到这些),开一个坑记录一下树相关的题解吧~
导航
树的层序遍历
从最基本的二叉树开始,树的层序遍历通常来说就是按照树的层数,从上往下的将每一层,按每一层从左到右的顺序遍历出来:
剑指 Offer 32 - I. 从上到下打印二叉树
像这样的二叉树,通过层序遍历遍历出来的结果应该是[3,9,20,15,17]
在没有任何其它特殊要求的情况下,我们借助队列直接把树层序遍历出来:
import java.util.*;
class Solution {
public int[] levelOrder(TreeNode root) {
List<Integer> res=new ArrayList<>();
// 空值检测
if(root == null){
return new int[0];
}
// 借助队列在存放树节点
Queue<TreeNode> queue=new LinkedList<>();
queue.offer(root);
while(!queue.isEmpty()){
// 拿出队头进行操作
TreeNode tmp = queue.poll();
// 这里的入队操作是先左后右,保证每层的打印顺序是从左到右
// 当队头的左节点非空,将其左节点入队
if(tmp.left != null){
queue.offer(tmp.left);
}
// 当队头的左节点非空,将其左节点入队
if(tmp.right != null){
queue.offer(tmp.right);
}
// 将当前取出的队头输出(添加到结果列表)
res.add(tmp.val);
}
// 将List转化为int[]
return res.stream().mapToInt(Integer::valueOf).toArray();
}
}
题解
学会了用队列来做层序遍历后,我们会遇到一些题目让你应用层序遍历来解题,如: