Leetcode 1522. N 叉树的直径
本文最后更新于389 天前,其中的信息可能已经过时,如有错误请发送邮件到2446865563@qq.com

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.执行结果

觉得有帮助可以投喂下博主哦~感谢!

作者:geek007

转载请注明文章地址及作者哦~
暂无评论

发送评论 编辑评论


				
|´・ω・)ノ
ヾ(≧∇≦*)ゝ
(☆ω☆)
(╯‵□′)╯︵┴─┴
 ̄﹃ ̄
(/ω\)
∠( ᐛ 」∠)_
(๑•̀ㅁ•́ฅ)
→_→
୧(๑•̀⌄•́๑)૭
٩(ˊᗜˋ*)و
(ノ°ο°)ノ
(´இ皿இ`)
⌇●﹏●⌇
(ฅ´ω`ฅ)
(╯°A°)╯︵○○○
φ( ̄∇ ̄o)
ヾ(´・ ・`。)ノ"
( ง ᵒ̌皿ᵒ̌)ง⁼³₌₃
(ó﹏ò。)
Σ(っ °Д °;)っ
( ,,´・ω・)ノ"(´っω・`。)
╮(╯▽╰)╭
o(*////▽////*)q
>﹏<
( ๑´•ω•) "(ㆆᴗㆆ)
😂
😀
😅
😊
🙂
🙃
😌
😍
😘
😜
😝
😏
😒
🙄
😳
😡
😔
😫
😱
😭
💩
👻
🙌
🖕
👍
👫
👬
👭
🌚
🌝
🙈
💊
😶
🙏
🍦
🍉
😣
Source: github.com/k4yt3x/flowerhd
颜文字
Emoji
小恐龙
花!
上一篇
下一篇