Leetcode 1522. N 叉树的直径

1.题目基本信息

1.1.题目描述

给定一棵 N 叉树 的根节点 root ,计算这棵树的直径长度。

N 叉树的直径指的是树中任意两个节点间路径中 最长 路径的长度。这条路径可能经过根节点,也可能不经过根节点。

(N 叉树的输入序列以层序遍历的形式给出,每组子节点用 null 分隔)

1.2.题目地址

https://leetcode.cn/problems/diameter-of-n-ary-tree/description/

2.解题方法

2.1.解题思路

深度优先搜索

时间复杂度:O(n)

2.2.解题步骤

第一步,定义维护变量。result维护最长的直径

第二步,定义递归函数。递归任务:返回从node节点开始,到达叶节点最长的两条路径的长度

2.1.递归出口;当node为叶节点时,递归退出

2.2.递归主体;使用maxLen1和maxLen2分别维护node结点到达叶节点第一长和第二长的路径长度

第三步,调用递归,更新result;并返回结果

3.解题代码

Python代码

class Solution:
    # 思路:深度优先搜索
    def diameter(self, root: 'Node') -> int:
        # 第一步,定义维护变量。result维护最长的直径
        self.result = 0
        # 第二步,定义递归函数。递归任务:返回从node节点开始,到达叶节点最长的两条路径的长度
        def dfs(node: 'Node') -> list[int]:
            # 2.1.递归出口
            if len(node.children) == 0:
                return [0, 0]
            # 2.2.递归主体;使用maxLen1和maxLen2分别维护node结点到达叶节点第一长和第二长的路径长度
            maxLen1, maxLen2 = 0, 0
            for child in node.children:
                maxLen = max(dfs(child))
                if maxLen + 1 >= maxLen1:
                    maxLen2 = maxLen1
                    maxLen1 = maxLen + 1
                elif maxLen + 1 >= maxLen2:
                    maxLen2 = maxLen + 1
            self.result = max(self.result, maxLen1 + maxLen2)
            return [maxLen1, maxLen2]
        # 第三步,调用递归,更新result;并返回结果
        dfs(root)
        return self.result


4.执行结果

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

Benjamin Tang

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

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

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

打赏作者

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

抵扣说明:

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

余额充值