大家好,我是爱动漫更爱编程的小工同学~
全文目录
🎁题目分析
💡思路点拨
🏆参考代码
🚀每日一图
🎁题目分析
N叉树层序遍历问题其实就是二叉树层序遍历问题简单变形而来,简单来说就是把二变成了N,把左右子树统一变为子树。所以在这一道题中,我们使用广度优先搜索解决。
💡思路点拨
注意:树的问题上来先考虑root为空的情况
我们首先把根节点 root 放入队列中,随后在广度优先搜索的每一轮中,我们首先记录下当前队列中包含的节点个数记为 size,即表示上一层的节点个数。在这之后,我们从队列中依次取出节点,直到取出了上一层的全部 size个节点为止。当取出节点 cur 时,我们将 cur 的值放入一个临时列表,再将cur 的所有子节点全部放入队列中。
当这一轮遍历完成后,临时列表中就存放了当前层所有节点的值。这样一来,当整个广度优先搜索完成后,我们就可以得到层序遍历的结果。
🏆参考代码(Java版)
class Solution {
public List<List<Integer>> levelOrder(Node root) {
//判空操作
if (root == null) {
return ret;
}
List<List<Integer>>ret=new ArrayList<>(); //存储每一层的节点值
Dueue<Node> queue = new ArrayDeque<Node>();
queue.offer(root);//先放入根节点
while (!queue.isEmpty()) {
int size = queue.size();
List<Integer> arr = new ArrayList<Integer>();
for (int i = 0; i < size; ++i) {
Node cur = queue.poll();//取出根节点
arr.add(cur.val);//存储根节点值
for (Node child : cur.children) {
queue.offer(child);//存入根节点的所有孩子节点
}
}
ret.add(arr);
}
return ret;
}
}