LeetCode-热题100:543. 二叉树的直径
创作时间:
作者:
@小白创作中心
LeetCode-热题100:543. 二叉树的直径
引用
CSDN
1.
https://blog.csdn.net/qq_44852180/article/details/137826849
二叉树的直径是指树中任意两个节点之间最长路径的长度。这条路径可能经过也可能不经过根节点。在LeetCode的这道题目中,我们需要计算给定二叉树的直径。
题目描述
给你一棵二叉树的根节点,返回该树的直径。
二叉树的直径是指树中任意两个节点之间最长路径的长度。这条路径可能经过也可能不经过根节点
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.
* type TreeNode struct {
* Val int
* Left *TreeNode
* Right *TreeNode
* }
*/
func diameterOfBinaryTree(root *TreeNode) int {
// 定义一个内部的 dfs 函数用于深度优先搜索
var dfs func(*TreeNode) int
// 初始化最大直径为 0
res := 0
dfs = func(node *TreeNode) int {
// 如果节点为空,返回 0
if node == nil {
return 0
}
// 递归计算左子树和右子树的深度
l := dfs(node.Left)
r := dfs(node.Right)
// 更新最大直径
res = max(res, l + r)
// 返回当前节点的深度
return max(l, r) + 1
}
// 调用 dfs 函数,开始计算
dfs(root)
return res
}
// 辅助函数,返回两个整数的最大值
func max(a, b int) int {
if a > b {
return a
}
return b
}
代码解释
- 定义
dfs
函数:
dfs
函数用于深度优先搜索二叉树,并在递归过程中更新最大直径。 - 递归计算深度:
- 如果节点为空,则返回 0。
- 递归计算左子树
l
和右子树
r
的深度。 - 更新当前直径的最大值
res
为
l + r
。 - 返回当前节点的深度
max(l, r) + 1
。
- 返回结果:最后返回最大直径
res
。
路径为节点
4
、节点
2
、节点
1
、节点
3
或节点
5
。
热门推荐
人工智能专业人才行业现状及前景:人工智能各类专业人才需求空间广阔
航空、航天、航宇……你能分清吗?这个称呼有中国特色
Excel公式EVALUATE函数使用指南
韧带断裂的治疗方法是什么
三角洲行动物品检视攻略:移动端与PC端操作详解
最大的野猪:深入探讨
潮汕英歌舞 槌起春潮涌
红薯为什么不能当主食?从前拯救饥荒,现在“地位”不如土豆?
土豆:最被人忽视的世界第四大主粮,为什么成不了中国人的主食?
八字中辛金的喜忌—《辛金八字案例分析:百例解读人生奥秘》
小肠憩室炎怎么治疗
肠憩室最简单的解决办法
狂犬疫苗怎么打
日式黑椒巴沙鱼柳的制作方法(以新鲜的鱼肉)
散光戴眼镜可以改善吗
“一累就炸毛”怎么办?学会疲劳情绪管理
胸闷是人体发生心血管系统疾病的最早症状之一吗
主板供电有什么影响
网络文学出圈更出彩(深观察)
全国首例 腾讯《穿越火线》协助破获DMA外挂案
风暖型浴霸怎么安装 风暖浴霸安装方法 安装位置
村里开了个咖啡馆!看三门这位“00后”归田记!
一年22倍的新晋游资归因操作模式分析
急性腰扭伤的中医辨证论治
正宗湖南农家小炒肉的做法(5分钟就能学会)
中外合作办学计划内外区别 计划外招生可信吗
曝秦奋父亲发家史!得罪大佬差点被喂鱼,危难之际周正毅前妻搭救
玉米、水稻、小麦全国种植大数据地图
市场需求波动风险评估
显卡超频有什么用 显卡超频怎么设置