LeetCode hot100-543 二叉树的直径

复制代码
class Solution {
public:
    int diameterOfBinaryTree(TreeNode* root) {
        ans=0;
        maxdep(root);
        return ans;
    }
private:
    int ans;
    int maxdep(TreeNode* root){
        if(!root) return 0;
        int l=maxdep(root->left);
        int r=maxdep(root->right);
        ans=max(ans,l+r);
        return (l>r?l:r)+1;
    }
};
复制代码
int maxDepth(TreeNode* root) {
    if (!root) return 0;
    return max(maxDepth(root->left), maxDepth(root->right)) + 1;
}

这个返回的是节点数:

  • 空节点:0

  • 单节点:1

  • 两层树:2

复制代码
    1
   / \
  2   3
 / \
4   5

对于节点 2:

  • 左子树高度 = 1(节点4)

  • 右子树高度 = 1(节点5)

  • 经过节点2的最长路径 = 左高度 + 右高度 = 1 + 1 = 2(边数)

所以代码中的 l + r 实际上加的是节点数 ,但结果恰好等于边数。

复制代码
ans = max(ans, l + r);

因为:

  • l = 左子树的高度(节点数)

  • r = 右子树的高度(节点数)

  • 经过当前节点的路径 = 左子树节点数 + 右子树节点数 = 边数

复制代码
return (l > r ? l : r) + 1;
          ↑              ↑
    孩子最大深度    加上当前节点到孩子的边
  • l 和 r:孩子到他们最深后代的距离(边数)

  • +1:当前节点到孩子的 1 条边

  • 返回值:当前节点到最深后代的距离(边数)

相关推荐
挖掘狂人2 分钟前
哈希算法:一根看不见的 "指纹",如何撑起整个互联网
算法·程序员·掘金技术征文
不会就选b36 分钟前
算法日常・每日刷题--<动态规划>22
算法·动态规划
释厄62341 分钟前
字画同体论——字即画·几何即字·漫画与小说=文本层
人工智能·算法
沫璃染墨1 小时前
从零入门数据结构与算法(一):复杂度分析——从算法效率到时间与空间复杂度
c语言·开发语言·数据结构·笔记·算法·飞书
熊猫钓鱼>_>1 小时前
面试出现 606 次的第 K 大,被拆成三个问题问
算法·面试·职场和发展·校招·面经·oj·ai生成
xuxigifxfh2 小时前
牛客:BISHI2 【模板】栈的操作
java·开发语言·windows·算法
INGNIGHT2 小时前
593 · 石头游戏 II (区间dp石子合并 翻倍循环问题)
leetcode
aqiu1111112 小时前
【C++算法打怪专栏】LeetCode 402. 移掉 K 位数字(单调栈 + 贪心)
c++·算法·leetcode
职业信用与履历核验知识库2 小时前
职业画像的数据质量与缺失值处理可靠吗?来源、验证与纠错方法
职场和发展
糖果豆豆2 小时前
对象是字段,还是关系?集合论和范畴论吵了三十年,答案是两个都对
算法·架构