LeetCode 第 102. Binary Tree Level Order Traversal 题,题目难度 Medium,
一. 题目要求
给定一个二叉树,返回其按层序遍历得到的节点值。 (即逐层地,从左到右访问所有节点)。
示例:
二叉树:[3,9,20,null,null,15,7],
3
/ \
9 20
/ \
15 7
返回其层次遍历结果:
[
[3],
[9,20],
[15,7]
]
二. 解题思路 & 代码实现
一道典型的考察 BFS(广度优先遍历)的题目,思路也比较简单。
解题思路:
- 从根节点开始,作为第一层,遍历该层节点值
- 遍历该层所有节点的子节点
- 递归遍历子节点
实现代码如下:
class Solution {
private List<List<Integer>> result = new ArrayList<>();
public List<List<Integer>> levelOrder(TreeNode root) {
if (root == null) {
return result;
}
List<TreeNode> nodes = new ArrayList<>();
nodes.add(root);
this.bfs(nodes);
return result;
}
// 广度优先遍历
public void bfs(List<TreeNode> treeNodes) {
int length = treeNodes.size();
if (length == 0) {
return;
}
List<TreeNode> nodes = new ArrayList<>();
List<Integer> nodeVals = new ArrayList<>();
for (int i = 0; i < length; i ++) {
TreeNode node = treeNodes.get(i);
nodeVals.add(node.val);
if (node.left != null) {
nodes.add(node.left);
}
if (node.right != null) {
nodes.add(node.right);
}
}
this.result.add(nodeVals);
this.bfs(nodes);
}
}
三. 解题后记
虽然是 Medium 级别的题目,但做起来挺简单的,只要学习过 BFS 广度优先遍历就很容易找到思路,常用的数据结构和算法还是有必要掌握的。
老铁,都看到这了来一波点赞、评论、关注三连可好
我是 AhriJ邹同学,前后端、小程序、DevOps 都搞的炸栈工程师。博客持续更新,如果觉得写的不错,欢迎来一波老铁三连,不好的话也欢迎指正,互相学习,共同进步。