首页 > 编程语言 >LeetCode Top 100: 二叉树的直径 (python)

LeetCode Top 100: 二叉树的直径 (python)

时间:2023-04-18 22:48:53浏览次数:34  
标签:diameter python max Top dfs height 二叉树 self

 

给定一棵二叉树,你需要计算它的直径长度。一棵二叉树的直径长度是任意两个结点路径长度中的最大值。这条路径可能穿过也可能不穿过根结点。

 

示例 :
给定二叉树

          1
         / \
        2   3
       / \     
      4   5    

返回 3, 它的长度是路径 [4,2,1,3] 或者 [5,2,1,3]。

 

注意:两结点之间的路径长度是以它们之间边的数目表示。

 

实现:

以下是一种使用深度优先搜索(DFS)来求解二叉树直径的Python实现方法:

class Solution:
    def diameterOfBinaryTree(self, root: TreeNode) -> int:
        self.max_diameter = 0
        def dfs(node):
            if not node:
                return 0
            left_height = dfs(node.left)
            right_height = dfs(node.right)
            self.max_diameter = max(self.max_diameter, left_height + right_height)
            return 1 + max(left_height, right_height)
        dfs(root)
        return self.max_diameter

这个函数的输入参数是二叉树的根节点root,输出是二叉树的直径长度。

函数中的dfs是递归函数,用于遍历每个节点,并计算该节点为根节点的子树的高度。在递归过程中,我们可以得到左右子树的高度,然后用它们的和来更新最大直径长度self.max_diameter。最后返回的是该节点为根节点的子树的高度。

在函数最开始,我们需要对self.max_diameter进行初始化,因为二叉树的直径长度可能为0。然后我们调用dfs函数来遍历整个二叉树,最后返回self.max_diameter的值。

  

 

标签:diameter,python,max,Top,dfs,height,二叉树,self
From: https://www.cnblogs.com/huadongw/p/17331463.html

相关文章

  • 4月18日leetcode二叉树几种遍历方式的非递归和递归
    给你二叉树的根节点 root ,返回它节点值的 前序 遍历。 示例1:二叉树的前序中序和后序遍历算法是学习二叉树必不可少的,若是使用c语言遍历前中后序还是比较繁琐的,因为要考虑遍历结果存放的序列大小问题,想要解决这个问题就得想用递归计算二叉树的节点数量,再调用递归子函数完......
  • 关于PythonNet与TensorFlow的调试技巧
    1.使用TensorFlow2.x版本训练的模型,在导入时容易报错,不要跨版本训练或者调用模型。报错内容通常定位到restore方法。2.PythonNet调用py文件报错时,右键该文件执行后报错内容会一闪而过,可以右键使用Python编译器(Idel)打开,错误会详细显示,且内容与编辑器一样。3.TensorFlow1.9最......
  • 教你用Python画哆啦A梦、海绵宝宝、皮卡丘、史迪仔!
    一、哆啦A梦  由于代码过长,这里仅显示部分代码:fromturtleimport*importturtleastfromrandomimport*#五轨迹跳跃defmy_goto(x,y):penup()goto(x,y)pendown()defeyes():fillcolor('#ffffff')begin_fill()tracer(False)......
  • 23-4-18--二叉树--完全二叉树的层序遍历
    一个二叉树,如果每一个层的结点数都达到最大值,则这个二叉树就是完美二叉树。对于深度为 D 的,有 N 个结点的二叉树,若其结点对应于相同深度完美二叉树的层序遍历的前 N 个结点,这样的树就是完全二叉树。给定一棵完全二叉树的后序遍历,请你给出这棵树的层序遍历结果。输入格式:......
  • 【Python毕业设计】基于Python+Flask+MySQL的学生信息管理系统(附完整源码)
    1、项目说明基于python+Flask+mysql的学生信息管理系统项目实战项目需要安装pycharm专业版,mysql数据库以及项目所需的所有模块创建数据库名称db_online_notes,然后执行sql文件生成数据表和数据项目需要安装flask,pymysql以及其他的一些模块安装命令如下:pipinstall-ihttps://......
  • 记一次python写爬虫爬取学校官网的文章
    有一位老师想要把官网上有关数字化的文章全部下载下来,于是找到我,使用python来达到目的首先先查看了文章的网址获取了网页的源代码发现一个问题,源代码里面没有url,这里的话就需要用到抓包了,因为很明显这里显示的内容是进行了一个请求,所以只能通过抓包先拿到请求的url从而获得每一......
  • 查看python脚本所依赖三方包及其版本
    1.使用pip命令安装,利用豆瓣镜像,命令如下:pipinstallpipreqs-ihttp://pypi.douban.com/simple--trusted-hostpypi.douban.com2.在终端导入程序exportPATH=$PATH:~/.local/bin3.在项目根目录下执行命令pipreqs./work#报错就执行下面这条pipreqs./work--encoding=utf......
  • python csv.reader 读取文件或list
    读取文件withopen(file_path,encoding='UTF-8')asfile:lines=csv.reader(file,delimiter="#",quotechar='"')forrowinlines:print(row)读取list注意:如果是字符串,一定要转成list.例如 rows=csv.reader(["John#......
  • Python小练习:解决strftime()中国时区乱码问题
    Python小练习:解决strftime()中国时区乱码问题作者:凯鲁嘎吉-博客园 http://www.cnblogs.com/kailugaji/1.mytest.py1#-*-coding:utf-8-*-2#Author:凯鲁嘎吉CoralGajic3#https://www.cnblogs.com/kailugaji/4#Python小练习:解决strftime()中国时区乱码问......
  • PYTHON银行机器学习:回归、随机森林、KNN近邻、决策树、高斯朴素贝叶斯、支持向量机SV
    全文下载链接:http://tecdat.cn/?p=26219最近我们被客户要求撰写关于银行机器学习的研究报告,包括一些图形和统计输出。该数据与银行机构的直接营销活动相关,营销活动基于电话。通常,需要与同一客户的多个联系人联系,以便访问产品(银行定期存款)是否会(“是”)或不会(“否”)订阅银行数据集我......