543.二叉树的直径

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

本题需要明确二叉树的直径计算方法:

  • 二叉树的直径不一定过根节点,需要遍历左子节点和右子节点。
  • root的直径 = 左子树深度+右子树的深度+1
  • root的高度 = Max(左子树深度,右子树深度) + 1
    所以保存一个节点当前直径最大值,再递归的求每个节点左右子树的深度,每次递归都保存直径最大值,最后返回即可。
class Solution:def diameterOfBinaryTree(self, root: Optional[TreeNode]) -> int: result=[]def getdepth(root):if not root:return 0left=getdepth(root.left)right=getdepth(root.right)result.append(left+right+1)return 1+max(left,right)getdepth(root)return max(result)-1

这里强调一波概念:

  • 二叉树节点的深度:指从根节点到该节点的最长简单路径边的条数。
  • 二叉树节点的高度:指从该节点到叶子节点的最长简单路径边的条数。
  • 二叉树的直径, 相当于求其任意两个节点的最大路径, 这又可以转化为每个节点的左子树深度+右子树深度+1 。
  • 但leetcode中强调的深度和高度很明显是按照节点来计算的,如图:

543.二叉树的直径相关推荐

  1. LeetCode Algorithm 543. 二叉树的直径

    543. 二叉树的直径 Ideas 这题貌似也在左神算法里见过. 基本思想就是递归,根节点从左子树获得一个想要的信息,从右子树获得一个想要的信息,然后对两个信息进行处理. 其实可以把直径分成两半看:从 ...

  2. 543. 二叉树的直径

    543. 二叉树的直径 描述 给定一棵二叉树,你需要计算它的直径长度.一棵二叉树的直径长度是任意两个结点路径长度中的最大值.这条路径可能穿过也可能不穿过根结点. 示例 : 给定二叉树 1/ \2 3/ ...

  3. 543. 二叉树的直径 golang

    文章目录 543. 二叉树的直径 example 正确解法 question 代码(wrong) 543. 二叉树的直径 概要: 借鉴了这个题的代码.可是有一个测试用例过不去 https://blog ...

  4. 【LeetCode】【HOT】543. 二叉树的直径(递归)

    [LeetCode][HOT]543. 二叉树的直径 文章目录 [LeetCode][HOT]543. 二叉树的直径 package hot;class TreeNode{int val;TreeNo ...

  5. Java实现 LeetCode 543 二叉树的直径

    543. 二叉树的直径 给定一棵二叉树,你需要计算它的直径长度.一棵二叉树的直径长度是任意两个结点路径长度中的最大值.这条路径可能穿过根结点. 示例 : 给定二叉树 1/ \ 2 3 / \ 4 5 ...

  6. LeetCode 543二叉树的直径-简单

    给定一棵二叉树,你需要计算它的直径长度.一棵二叉树的直径长度是任意两个结点路径长度中的最大值.这条路径可能穿过也可能不穿过根结点. 示例 : 给定二叉树 1/ \2 3/ \ 4 5 返回 3, 它的 ...

  7. LeetCode 543. 二叉树的直径(DFS)

    1. 题目 给定一棵二叉树,你需要计算它的直径长度.一棵二叉树的直径长度是任意两个结点路径长度中的最大值.这条路径可能穿过根结点. 示例 : 给定二叉树1/ \2 3/ \ 4 5 返回 3, 它的长 ...

  8. leetcode - 543. 二叉树的直径

    给定一棵二叉树,你需要计算它的直径长度.一棵二叉树的直径长度是任意两个结点路径长度中的最大值.这条路径可能穿过根结点. 示例 : 给定二叉树 解题思路:使用递归,注意递归和迭代的区别 class So ...

  9. 【LeetCode笔记】543. 二叉树的直径(Java、dfs、二叉树)

    文章目录 题目描述 思路 & 代码 题目描述 思路 & 代码 由这个结论考虑:直径中一定有一个父结点,那么当前直径长度就是: 当前父结点的左子树深度 + 右子树深度 那么,只要遍历所有 ...

最新文章

  1. python使用socket实现协议TCP长连接框架
  2. 用户登录邮箱验证和发送邮件缓存应用
  3. 视频处理的知识_开源项目_项目列表
  4. 哲学家就餐问题--信号量和互斥量预防死锁
  5. 无人数据中心何时到来仍需等待
  6. Ubuntu16.04安装PCL库的python实现python-pcl,并且通过pcl加载pcd文件验证python-pcl是否安装成功
  7. Android中Context简介
  8. scp报错:not a regular file
  9. tomcat不能多次startup.sh,异常时直接,分析logs目录下的日志。
  10. Slip.js – 在触摸屏上实现 Swipe 对列表重新排序
  11. solaris下用户不能正常登录CDE界面的解决办法
  12. Qt creator5.7 OpenCV249之图片腐化(含源码下载)
  13. MTCNN可攻破?华为提出一种可复制、可靠的攻击方法
  14. 锐捷6800 vrrp mstp配置实例
  15. [转]恢复 git reset -hard 的误操作
  16. MySQL使用小技巧(一)——MySQL删除
  17. 遗传算法的基本概念和实现(附 Java 实现案例)
  18. 语音分享应用ios源码项目
  19. 使用USB直接方式解决ESXi识别加密狗的问题
  20. 读书笔记: Cartesian Impedance Control of Redundant and Flexible-Joint Robots, Section 1

热门文章

  1. JS压缩方法(使用uglify工具在本地压缩)及批量压缩
  2. 云计算需要考虑的安全技术
  3. Java 中 Boolean 和 boolean的区别
  4. FastAdmin列表实现自定义搜索及传值
  5. vue结合 element-ui实现强大的后台管理系统表格组件
  6. Java导出根据模板PDF(Springboot+Adobe Acrobat)
  7. 提升机,升降机,绞车,气缸驱动机械手爪,隧道式清洗干燥机,十字滑台机械手,小型饲料粉碎机……3D模型
  8. 吉林大学linux实验四
  9. CI框架学习笔记第三天
  10. excel打开空白如何解决