当前位置: 首页 > news >正文

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, 0for child in node.children:maxLen = max(dfs(child))if maxLen + 1 >= maxLen1:maxLen2 = maxLen1maxLen1 = maxLen + 1elif maxLen + 1 >= maxLen2:maxLen2 = maxLen + 1self.result = max(self.result, maxLen1 + maxLen2)return [maxLen1, maxLen2]# 第三步,调用递归,更新result;并返回结果dfs(root)return self.result

4.执行结果

相关文章:

  • Python项目文件组织与PyCharm实践:打造高效开发环境
  • 构建可重复的系统 - SRE 的 IaC 与 CI/CD 基础
  • RPA在持续集成和持续部署中的角色是什么?
  • 15.集合框架的学习
  • Docker-mongodb
  • uni-app 排坑
  • 【Linux学习笔记】ext2文件系统的深度剖析
  • 【1——Android端添加隐私协议(unity)1/3】
  • [密码学实战]使用C语言实现TCP服务端(二十九)
  • P1833 樱花
  • 高等数学-曲线积分与曲面积分
  • C++-继承
  • Axure系统原型设计首页模版方案
  • UE4 Simulation Stage 制作 平流
  • 5G 核心网中的 NPN 功能详解
  • 详解一下Go语言中的ParseInt
  • 【烧脑算法】单序列双指针:从暴力枚举到高效优化的思维跃迁
  • 后端开发实习生-抖音生活服务
  • 杰发科技AC7840——使用内部温度
  • AbMole推荐Rapamycin: 自噬、肿瘤、免疫、衰老研究的关键工具
  • 网站实名认证中心/怎么创建一个网站
  • 重庆平台网站建设平台/百度云盘登录电脑版
  • 广南网站制作/怎样在百度上打广告
  • 深圳电商平台网站建设/宁波网站建设与维护
  • 东莞樟木头做网站哪家好/平台seo
  • 网站开发网站设计的标准/2021年关键词排名