LeetCode刷题:二叉树的直径问题详解
创作时间:
作者:
@小白创作中心
LeetCode刷题:二叉树的直径问题详解
引用
1
来源
1.
https://developer.aliyun.com/article/1646916
给你一棵二叉树的根节点,返回该树的 直径 。
二叉树的 直径 是指树中任意两个节点之间最长路径的 长度 。这条路径可能经过也可能不经过根节点 root 。
两节点之间路径的 长度 由它们之间边数表示。
示例
示例 1:
输入:root = [1,2,3,4,5]
输出:3
解释:3 ,取路径 [4,2,1,3] 或 [5,2,1,3] 的长度。
示例 2:
输入:root = [1,2]
输出:1
提示
- 树中节点数目在范围 [1, 104] 内
- -100 <= Node.val <= 100
解题思路
这是一道经典的二叉树递归题目。关键在于理解二叉树直径的定义:任意两个节点之间的最长路径长度。这条路径可能经过也可能不经过根节点。
错误思路:直接计算左右子树的最大深度之和。这种思路的误区在于,直径的路径不一定存在于根节点的一级子树中。
正确思路:需要递归地对每个子树的直径进行更新,寻找所有子树中左右子树深度之和的最大值。
代码实现
/**
* Definition for a binary tree node.
* public class TreeNode {
* int val;
* TreeNode left;
* TreeNode right;
* TreeNode() {}
* TreeNode(int val) { this.val = val; }
* TreeNode(int val, TreeNode left, TreeNode right) {
* this.val = val;
* this.left = left;
* this.right = right;
* }
* }
*/
class Solution {
int max=0;
public int diameterOfBinaryTree(TreeNode root) {
if (root == null) return 0;
deep(root);
return max;
}
private int deep(TreeNode root) {
if (root == null) return 0;
// 递归计算左子树和右子树的最大深度
int leftDepth = deep(root.left);
int rightDepth = deep(root.right);
max=Math.max(max,leftDepth+rightDepth);
// 当前节点的最大深度是左子树和右子树深度的最大值加一
return 1 + Math.max(leftDepth, rightDepth);
}
}
思路分析
通过图示可以更直观地理解为什么直接计算左右子树深度之和是错误的:
如图所示,直径路径实际上存在于以-9为根节点的子树中,而不是直接通过根节点的左右子树。因此,必须递归地对每个子树的直径进行更新,寻找所有子树中左右子树深度之和的最大值,而不是直接求左右子树的深度。
热门推荐
缺钙的症状表现及人群差异
中老年人需警惕,腔隙性脑梗塞的预防指南
昆明旅游安全攻略:气候特点与出行注意事项
梳头泡脚按穴位,中医养生预防腔隙性脑梗死
揭秘腔隙性脑梗塞:高发却易被忽视,这样预防最有效
气温每降1度脑梗风险增1.13%,冬季这样吃最安全
腔隙性脑梗死发病率高,六大症状要警惕,四类人群需防范
四月昆明旅游攻略:5天4晚行程规划及预算详解
橙皮甙在化妆品中的美白作用
古埃及的狮子神祇:力量与权力的永恒象征
虎狮大战:谁才是丛林之王?
2025春晚嘉宾路透曝光!“春晚混子”再登台,网友:不该来的又来
在家工作的 9 个有用提示
金黄茶汤,三重口感:揭秘仙人茶的独特魅力
明代养生专著《赤凤髓》:71幅插图详解气功导引术
《<周易>十大智慧:古圣先贤的处世之道》
德国牧羊犬预防狗藓实用指南
秋冬季宠物护理,让你的狗狗远离皮肤病
资阳工业增速居全省前列,新能源智能装备引领新发展
云南文旅推六大专题产品,24条线路邀你“冬暖花开”
GaAs、GaN材料行业影响分析及发展战略研究报告
氮化镓(GaN):射频与电力技术的革命性材料
氮化镓(GaN)研究进展及其在新材料领域的应用前景
氮化镓(GaN)的最新技术进展
凯凯口才网教你优雅应对口误
熟冻帝王蟹清蒸攻略:7步做出餐厅级美味
清蒸、避风塘、炒年糕:10种螃蟹烹饪完全指南
从血压控制到手术治疗:腔隙性脑梗死全面治疗方案发布
乘机托运酒类物品:度数、数量与包装要求
厨房装修必读:灶台位置规划全攻略