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

LeetCode 热题 100 543. 二叉树的直径

LeetCode 热题 100 | 543. 二叉树的直径

大家好,今天我们来解决一道经典的二叉树问题——二叉树的直径。这道题在 LeetCode 上被标记为简单难度,要求计算给定二叉树的直径。


问题描述

给你一棵二叉树的根节点,返回该树的直径。二叉树的直径是指树中任意两个节点之间最长路径的长度。这条路径可能经过也可能不经过根节点。

示例 1:

输入:root = [1,2,3,4,5]
输出:3
解释:3,取路径 [4,2,1,3] 或 [5,2,1,3] 的长度。

示例 2:

输入:root = [1,2]
输出:1

提示:

  • 树中节点数目在范围 [1, 10^4]
  • -100 <= Node.val <= 100

解题思路

核心思想
  1. 递归法

    • 使用递归法计算每个节点的左子树和右子树的最大深度。
    • 对于每个节点,计算其左子树深度和右子树深度之和,作为该节点的直径。
    • 更新全局最大直径。
  2. 辅助函数

    • 定义一个辅助函数 maxDepth,用于计算以某个节点为根的子树的最大深度。

Python代码实现

class Solution:def diameterOfBinaryTree(self, root: TreeNode) -> int:self.max_diameter = 0def maxDepth(node: TreeNode) -> int:if not node:return 0left_depth = maxDepth(node.left)right_depth = maxDepth(node.right)# 更新全局最大直径self.max_diameter = max(self.max_diameter, left_depth + right_depth)return max(left_depth, right_depth) + 1maxDepth(root)return self.max_diameter

代码解析

  1. 初始化

    • 定义一个全局变量 self.max_diameter,用于存储全局最大直径。
  2. 递归函数

    • 定义一个辅助函数 maxDepth,用于计算以某个节点为根的子树的最大深度。
    • 如果节点为空,返回 0。
    • 递归计算左子树和右子树的最大深度。
    • 更新全局最大直径为左子树深度和右子树深度之和。
    • 返回当前节点的最大深度。
  3. 主函数

    • 调用 maxDepth 函数,从根节点开始计算最大深度。
    • 返回全局最大直径。

复杂度分析

  • 时间复杂度:O(n),其中 n 是树中节点的数量。每个节点被访问一次。
  • 空间复杂度:O(h),其中 h 是树的高度。递归调用栈的深度最多为树的高度。

示例运行

示例 1
输入:root = [1,2,3,4,5]
输出:3
解释:3,取路径 [4,2,1,3] 或 [5,2,1,3] 的长度。
示例 2
输入:root = [1,2]
输出:1

总结

通过递归法,我们可以高效地计算二叉树的直径。递归函数 maxDepth 用于计算每个节点的左子树和右子树的最大深度,并更新全局最大直径。希望这篇题解对大家有所帮助,如果有任何问题,欢迎在评论区留言讨论!

关注我,获取更多算法题解和编程技巧!

相关文章:

  • C++ 中的堆栈展开
  • RTOS优先级翻转
  • Python实用工具:pdf转doc
  • 【计算机视觉】OpenCV实战项目:ETcTI_smart_parking智能停车系统深度解析
  • 前端面试2
  • LangChain对话链:打造智能多轮对话机器人
  • AI大模型学习十八、利用Dify+deepseekR1 +本地部署Stable Diffusion搭建 AI 图片生成应用
  • 5月11日星期日早报简报微语报早读
  • 卷积神经网络-从零开始构建一个卷积神经网络
  • 电源架构与太阳能充电器电路设计分析
  • 【数据结构】线性表
  • 【RabbitMQ】 RabbitMQ高级特性(一)
  • 【洛谷P3386】二分图最大匹配之Kuhn算法/匈牙利算法:直观理解
  • 搭建基于chrony+OpenSSL(NTS协议)多层级可信时间同步服务
  • oracle 会话管理
  • PyCharm软件下载和配置Python解释器
  • linux--------------Ext系列⽂件系统(下)
  • 【STM32开发】-单片机开发基础(以STM32F407为例)
  • 互联网大厂Java面试实战:从Spring Boot到微服务的技术问答与解析
  • redis数据结构-06(LRANGE、LINDEX、LSET、LREM)
  • 夜读|尊重生命的棱角
  • 中央结算公司:减免境外央行类机构账户开户费用
  • 中医的千年传承:网络科学描绘其演化之路|PNAS速递
  • 河南洛阳新安县煤渣倾倒耕地:多年难恢复,为何至今未解决?
  • 人民日报整版聚焦:专家学者看2025中国经济增长点
  • 综艺还有怎样的新可能?挖掘小众文化领域