持续创作,加速成长!这是我参与「掘金日新计划 · 6 月更文挑战」的第3天,点击查看活动详情
一.题目:
429. N 叉树的层序遍历 给定一个 N 叉树,返回其节点值的层序遍历。(即从左到右,逐层遍历)。
树的序列化输入是用层序遍历,每组子节点都由 null 值分隔(参见示例)。
示例 1:
输入: root = [1,null,3,2,4,null,5,6]
输出: [[1],[3,2,4],[5,6]]
示例 2:
输入:root = [1,null,2,3,4,5,null,null,6,7,null,8,null,9,10,null,null,11,null,12,null,13,null,null,14]
输出:[[1],[2,3,4,5],[6,7,8,9,10],[11,12,13],[14]]
提示:
- 树的高度不会超过
1000 - 树的节点总数在
[0, 10^4]之间
二、思路分析:
首先看题目说明,题目给定N叉树,要求我们返回节点值的层序遍历(从左到右),题目已经明确告诉我们使用层序遍历,利用好题目给的信息点作答是很有必要的,所以这道题的基本思路为:
- 首先做边界判断,树为空直接返回,随后我们使用
广度优先遍历,首先将根节点放入节点队列中。 - 每次判断条件为判断队列的长度是否大于
0,首先将队列中的节点的节点值存入每一层的节点数组中,存储完毕后需要将它的子节点全部压入队列中,依次进行循环,在同一层的循环完成后将节点数组压入结果数组中,即可完成题目的要求。
PS:题目使用typescript作答,需要注意每个变量的数据类型。
三、代码:
/**
* Definition for node.
* class Node {
* val: number
* children: Node[]
* constructor(val?: number) {
* this.val = (val===undefined ? 0 : val)
* this.children = []
* }
* }
*/
function levelOrder(root: Node | null): number[][] {
if(!root){
return []
}
const res: number[][] = [];
const stack: Node[] = [root];
while(stack.length){
let len = stack.length
// 存储同一层的节点值
const curLevelNodes:number[] = []
while(len--){
const node: Node = stack.shift();
//存储节点值
curLevelNodes.push(node.val)
node.children.forEach(children => stack.push(children));
}
res.push(curLevelNodes);
}
return res
};
四、总结:
这道题目的思路还是比较简单的,几乎就是题目给了你解题思路,就是利用
层次遍历去遍历这个N叉树,做题的时候把拿节点跟去节点想象成是一个队列在进行操作即可。今天是儿童节,希望看到这篇文章的你能够有所收获,节日快乐!!!