「LeetCode」429-N 叉树的层序遍历

85 阅读2分钟

持续创作,加速成长!这是我参与「掘金日新计划 · 6 月更文挑战」的第3天,点击查看活动详情

一.题目:

429. N 叉树的层序遍历 给定一个 N 叉树,返回其节点值的层序遍历。(即从左到右,逐层遍历)。

树的序列化输入是用层序遍历,每组子节点都由 null 值分隔(参见示例)。

示例 1:

image.png

输入: root = [1,null,3,2,4,null,5,6]
输出: [[1],[3,2,4],[5,6]]

示例 2:

image.png

输入: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叉树,做题的时候把拿节点跟去节点想象成是一个队列在进行操作即可。今天是儿童节,希望看到这篇文章的你能够有所收获,节日快乐!!!