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

python-leetcode 39.二叉树的直径

题目:

给定一棵二叉树的根节点,返回该树的直径。

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

两节点之间路径的长度由他们之间的边数表示


方法一:深度优先搜索 

一条路径的长度为该路径经过的节点数减一,所以求直径(即求路径长度的最大值)等效于求路径经过节点数的最大值减一。

任意一条路径均可以被看作由某个节点为起点,从其左儿子和右儿子向下遍历的路径拼接得到

可以知道路径[9, 4, 2, 5, 7, 8]可以被看作以2为起点,从其左儿子向下遍历的路径[2, 4, 9]和从其右儿子向下遍历的路径[2, 5, 7, 8]拼接得到

假设知道对于该节点的左儿子向下遍历经过最多的节点数L(即以左儿子为根的子树的深度) 和其右儿子向下遍历经过最多的节点数R(即以右儿子为根的子树的深度),那么以该节点为起点的路径经过节点数的最大值即为L+R+1。

记节点node为起点的路径经过节点数的最大值为dnode​,那么二叉树的直径就是所有节点dnode​的最大值减一。

定义一个递归函数depth(node)计算dnode,函数返回该节点为根的子树的深度。先递归调用左儿子和右儿子求得它们为根的子树的深度L和R,则该节点为根的子树的深度即为max(L,R)+1该节点的d node值为L+R+1递归搜索每个节点并设一个全局变量ans记录dnode的最大值,最后返回ans-1即为树的直径。

# Definition for a binary tree node.
# class TreeNode(object):
#     def __init__(self, val=0, left=None, right=None):
#         self.val = val
#         self.left = left
#         self.right = right
class Solution(object):
    def diameterOfBinaryTree(self, root):
        """
        :type root: Optional[TreeNode]
        :rtype: int
        """
        self.ans=1
        def depth(node):
            if not node:
                return 0
            L=depth(node.left) #左儿子为根的子树的深度
            R=depth(node.right) #右儿子为根的子树的深度
            self.ans=max(self.ans,L+R+1) #计算d_node即L+R+1 并更新ans
            return max(L,R)+1  #返回该节点为根的子树的深度
        depth(root)
        return self.ans-1

时间复杂度:O(n)

空间复杂度:O(Height) Height为二叉树的高度

源自力扣官方题解
 

 


http://www.kler.cn/a/554950.html

相关文章:

  • HTTP常见状态码和HTTP的发展
  • PLC数据采集网关(三格电子)
  • DeepSeek学习
  • NPM如何更换淘宝镜像——Node.js国内镜像配置教程
  • 「JVS更新日志」低代码、ERP应用、智能BI、智能排产2.19更新说明
  • Linux 实操篇 组管理和权限管理、定时任务调度、Linux磁盘分区和挂载
  • Redis 中列表(List)常见命令详解
  • 抖音试水AI分身;腾讯 AI 战略调整架构;百度旗下小度官宣接入DeepSeek...|网易数智日报
  • 网络安全防护
  • 【深度学习】计算机视觉(CV)-图像生成-风格迁移(Style Transfer)
  • 接口测试-Protobuf相关
  • 【RabbitMQ业务幂等设计】RabbitMQ消息是幂等的吗?
  • 我用Ai学Android Jetpack Compose之Composable与View的区别与联系
  • LeetCode 热题 100_搜索插入位置(63_35_简单_C++)(二分查找)(”>>“ 与 “/”)
  • 【HappyBase】连接hbase报错:ecybin.ProtocolError: No protocol version header
  • A105基于SpringBoot实现的甘肃非物质文化网站
  • 宠物行业研究系列报告
  • 为什么WP建站更适合于谷歌SEO优化?
  • 【HarmonyOS之旅】基于ArkTS开发(三) -> 兼容JS的类Web开发(四) -> 常见组件(二) -> swiper
  • 油田安全系统:守护能源生命线的坚固壁垒