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 条边

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

相关推荐
二本咕咕-机械转码8 小时前
FreeRTOS深入解析(一)_链表与并发保护——哨兵循环链表、排序键游标、临界区与关调度
单片机·算法·链表
-银雾鸢尾-8 小时前
两数之和-C++实现
c++·算法
j7~9 小时前
【动态规划算法专题】动态规划五部曲实战:泰波那契数、三步问题、最小花费爬楼梯
c++·算法·动态规划·数据结构与算法
倍利福猎头公司官方账号9 小时前
大企业HR如何向猎头公司清晰传达AI岗位的技术需求?
人工智能·算法·机器人·求职招聘·业界资讯
揽星河..9 小时前
【C++】类和对象
c++·算法
D e re k ZH10 小时前
C++ 并发、未定义行为与工程化难点(No 3)
数据结构·c++·算法·面试
释厄62310 小时前
同性线套娃律——圆面积必然=1+2+...+n 的求和·圆心不与 π 相关
java·人工智能·算法·1024程序员节
暴力求解11 小时前
C++ ---继承(二)
开发语言·c++·算法
码林拾遗WJ11 小时前
告警分级的自动化实测:模型判断 vs 人工拍板
人工智能·算法·自动化
Tisfy11 小时前
LeetCode 0453.最小操作次数使数组元素相等:两次遍历(反向思维)
算法·leetcode·题解·遍历·反向思维