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为根节点的子树中,而不是直接通过根节点的左右子树。因此,必须递归地对每个子树的直径进行更新,寻找所有子树中左右子树深度之和的最大值,而不是直接求左右子树的深度。
热门推荐
猫咪舔毛的奇妙行为(探究猫咪舔毛一边舔一边咬的原因)
什么浴缸好?——选购指南与安装技巧
【技术教程】KaiOS设备刷机时adb remount失败的解决方案
艺术鉴赏入门指南:掌握欣赏创作的三大要点,培养艺术感知力
《流放之路》元素伤害转换机制深度解析
90后夫妻打造65㎡极简新居:拒绝过度装修,追求生活本质
前世今生因果轮回,周易测算真能窥探命运
春节剧综LIST!过年宅家追这些
AI分镜拍摄脚本教程:从入门到拍摄技巧全解析
家常菜的名称及做法(家常菜的菜名和食材制作步骤)
余华:我们对人性最大误会,是以为只要是人,都会有点人性和良心
探秘宁波美食:从海鲜盛宴到传统年糕的多样吃法
电子鱼鳔浮漂:科技赋能传统钓鱼
巫妖VS冰女 以刀塔传奇为例 解析两个英雄的优劣势与适用场景
湖北武汉新洲区:聚焦科技支撑产业发展 加快推进创新型县(市、区)建设
网上贷款逾期诉讼案如何处理
电工新技术及其应用
组装电脑的CPU散热器一定要选对!谈谈电脑散热器匹配的重要性!
拉拢两大足球游戏,FIFA电竞“慌了”
昙花一现的原因:从生物学揭秘昙花为何只开一会儿
中医肝与胆病辨证
崩坏3往世乐土|想要轻松遨游乐土?你可能需要这份强势角色盘点
整牙带完牙套一定要戴保持器吗?当然需要!一文说清其中关键性
《哪吒 1》与《哪吒 2》深度对比分析:传承与突破
汽车防冻液加注指南:位置、方法及维护注意事项详解
《切尔诺贝利》:故事的真相
深入理解容器化与Kubernetes:现代云原生架构的核心
婴儿奶嘴型号几个月换?这份实用指南请收好
中国古代修仙故事:云隐仙踪,卫叔卿的云母仙缘
龙井和毛峰的区别在哪(龙井和毛峰的区别)