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

543.二叉树的直径

        二叉树的直径是指二叉树中的最长路径。例如

      

        在这棵树中,最长路径为4-3-2-5-6。这个最长路径是如何得出的呢?回顾之前做过的求深度的题目,我们发现二叉树的左右子树与自身结构相似,这自然地将问题分解为子问题,因此适合采用递归方法解决,那么二叉树的深度与直径是否存在某种联系呢?

        值得注意的是,最长路径必然存在"拐点"。例如在第二棵树中,路径在节点2处拐弯,得到以2为根节点的最长路径长度为3,即左子树最长链 + 右子树最长链 + 2(根节点与两个子树之间的边)。再看第三棵树中的节点5,同样遵循这一计算步骤。那么,在递归的"归"阶段,我们需要返回什么呢?以节点2为例,在返回时,我们将2-3-4这条左右子树中最长的链返回给节点5,即max(左子树最长链,右子树最长链) + 1。

综上所述,该问题的算法步骤可归纳为:

  1. 在递归遍历子树的同时计算树的直径;
  2. 当前节点作为"拐点"时的直径等于左子树最长链 + 右子树最长链 + 2;
  3. 返回给父节点的是以当前节点为根的子树的max(左子树最长链,右子树最长链) + 1。
    class Solution {
    public:int ans = 0;int Longest(TreeNode* root) {if (root == nullptr) {return -1;}int leftLen = Longest(root->left);int rightLen = Longest(root->right);ans = max(ans,leftLen + rightLen + 2);return max(leftLen,rightLen) + 1;}int diameterOfBinaryTree(TreeNode* root) {Longest(root);return ans;}
    };

        时间复杂度:O(n),每个点都会遍历一次

        空间复杂度:O(n),在最坏情况下,二叉树为一条链,需要O(n)栈空间 

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

相关文章:

  • CT重建笔记(五)—2D平行束投影公式
  • 5.15 学习日志
  • Java 面向对象详解和JVM底层内存分析
  • 图表制作-基础雷达图
  • 代码随想录算法训练营第60期第三十九天打卡
  • 2025.5.17 字符串hash
  • 如何利用Redis实现延迟队列?
  • 【leetcode】2900. 最长相邻不相等子序列 I
  • 数据库索引优化:如何平衡查询与写入性能
  • 劳特巴赫trace32烧录方法
  • 【Linux网络】ARP协议
  • 使用Pinia持久化插件-persist解决刷新浏览器后数据丢失的问题
  • 使用python进行船舶轨迹跟踪
  • 编译原理7~9
  • 【Element UI】表单及其验证规则详细
  • python运算符
  • python训练营打卡第26天
  • Go语言 Gin框架 使用指南
  • js中不同循环的使用以及结束循环方法
  • 两个电机由同一个控制器控制,其中一个电机发生堵转时,另一个电机的电流会变大,是发生了倒灌现象吗?电流倒灌产生的机理是什么?
  • Gartner《How to Leverage Lakehouse Design in Your DataStrategy》学习心得
  • SAP HCM 0008数据存储逻辑
  • 《棒球万事通》球类运动有哪些项目·棒球1号位
  • c++ 运算符重载
  • 16 C 语言布尔类型与 sizeof 运算符详解:布尔类型的三种声明方式、执行时间、赋值规则
  • qt6 c++操作qtableview和yaml
  • 使用 CodeBuddy 开发一款富交互的屏幕录制与注释分享工具开发纪实
  • C语言查漏补缺
  • Codeforces Round 1024 (Div.2)
  • 【C/C++】C++返回值优化:RVO与NRVO全解析