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

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

http://www.xdnf.cn/news/8047.html

相关文章:

  • ShenNiusModularity项目源码学习(28:ShenNius.Admin.Mvc项目分析-13)
  • 冒险岛(MapleStory) 083脚本教程
  • Scrapy爬取heima论坛所有页面内容并保存到MySQL数据库中
  • SQL语句面试题
  • Ubuntu 22.04上升级Node.js版本
  • Web安全与漏洞挖掘
  • C++ inline 内联函数
  • 【PhysUnits】7 类型整数基本结构体(basic.rs)
  • 掩膜合并代码
  • 力扣算法---哈希表总结篇
  • 【无标题】Spring AI 1.0 正式发布!核心内容和智能体详解
  • upload-labs通关笔记-第15关 文件上传之getimagesize绕过(图片马)
  • C语言判断素数(附带源码和解析)
  • 第十三届蓝桥杯国赛PythonA题解
  • 贪心算法题目合集2
  • 链表day3
  • Linux电源管理——PSCI初始化流程和多核启动流程
  • 对于final、finally和finalize不一样的理解
  • Java基于SSM的数学辅导微信小程序【附源码、文档说明】
  • 招投标项目记录
  • 一键二次元风格转换:风格转换 ComfyUI 使用教学--
  • 逆向学习笔记1
  • 【性能提升300%】Function Calling高并发实践:gRPC优化+缓存策略+容错设计​
  • 2024正式版企业级在线客服系统源码+语音定位+快捷回复+图片视频传输+安装教程
  • id分页遍历数据漏行问题
  • 猎板PCB如何以高可靠方案护航大国重器?
  • 发布Chrome浏览器插件的几种方法
  • C++进阶--C++11
  • C++ stack对象创建、入栈、获取栈顶
  • MySQL高可用实战:PXC集群原理与部署全解析,让数据库永不宕机