【leetcode】559.N叉树的最大深度


在这里插入图片描述

题目

leetcode原题链接

给定一个 N 叉树,找到其最大深度。
最大深度是指从根节点到最远叶子节点的最长路径上的节点总数。
N 叉树输入按层序遍历序列化表示,每组子节点由空值分隔(请参见示例)。

示例 1:
在这里插入图片描述
输入:root = [1,null,3,2,4,null,5,6]
输出:3

示例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]
输出:5

提示:
树的深度不会超过 1000 。
树的节点数目位于 [0, 104] 之间。

思路

在这里插入图片描述
首先来看看代码模板中n叉树节点的定义

/**
 * // Definition for a Node.
 * function Node(val,children) {
 *    this.val = val;
 *    this.children = children;
 * };
 */

对比二叉树,n叉树的孩子节点个数不一致,但是通过children的就可以遍历每个孩子节点了,所以这道题本质与【leetcode】104.二叉树的最大深度是一样的,思路也完全一样,这里同样给出递归和迭代两种写法。

代码

在这里插入图片描述

一、递归法

/**
 * // Definition for a Node.
 * function Node(val,children) {
 *    this.val = val;
 *    this.children = children;
 * };
 */

/**
 * @param {Node|null} root
 * @return {number}
 */
var maxDepth = function(root) {
    // 递归返回条件,空节点看作高度为0的树
    if(!root) return 0

    let max = 0

    // 后序遍历,通过children遍历所有孩子节点并计算得到高度
    for(let i = 0 ; i < root.children.length ; i++){
        const cur = maxDepth(root.children[i])
        max = max > cur ? max : cur
    }

    // 返回最终的高度
    return 1 + max
};

二、迭代法(层序遍历)

/**
 * // Definition for a Node.
 * function Node(val,children) {
 *    this.val = val;
 *    this.children = children;
 * };
 */

/**
 * @param {Node|null} root
 * @return {number}
 */
var maxDepth = function(root) {
    if(!root) return 0
    let queue = [root]
    let depth = 0

    while(queue.length){
        const levelLength = queue.length	//每一层的节点个数
        for(let i = 0 ; i < levelLength ; i++){
            const cur = queue.shift()
            // 这里的逻辑和二叉树不同
            for(let i = 0 ; i < cur.children.length ; i++){
                queue.push(cur.children[i])
            }
        }
        depth++
    }

    return depth
};

关注我的专栏,每天更新三道leetcode题解,一起变强!

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

前端corner

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值