前言
本题主要考查滑动窗口的使用。
提示:以下是本篇文章正文内容,编程语言为Java
一、题目描述
给你二叉树的根节点 root ,返回其节点值的 层序遍历 。 (即逐层地,从左到右访问所有节点)。
示例 1:
输入:root = [3,9,20,null,null,15,7]
输出:[[3],[9,20],[15,7]]
链接:二叉树的层序遍历
二、解题思路
本题可以用 BFS 解决这个问题。主要步骤如下:
1. 首先根节点加入队列;
2. 当队列不为空的时候。
1) 求当前队列的长度 n;
2) 依次从队列中取出 n 个元素并添加到列表,同时将节点的左右孩子入队,然后进入下一次迭代。
三、示例代码
class Solution {
public List<List<Integer>> levelOrder(TreeNode root) {
List<List<Integer>> ans=new ArrayList<>();
Deque<TreeNode> q=new LinkedList<>();
if(root!=null){
q.offer(root);
}
while(!q.isEmpty()){
List<Integer> tmp=new ArrayList<>();
for(int i=q.size();i>0;i--){
TreeNode node=q.poll();
tmp.add(node.val);
if(node.left!=null){
q.offer(node.left);
}
if(node.right!=null){
q.offer(node.right);
}
}
ans.add(tmp);
}
return ans;
}
}
总结
常见的搜索分为 深度优先搜索 DFS 和广度优先搜索 BFS ,对于树的层次遍历,我们借助 BFS 的思想来解决。另一个 BFS 典型的应用场景为最短路径问题,例如力扣的 1162 题 地图分析。