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
。
热门推荐
如何优化负面舆情?从监测到优化的全流程
吕留良案的悲剧:思想的代价与历史的反思
水生动物行为学:揭秘水下世界的奇妙行为
养老金新调整:揭秘企业与机关事业单位退休人员待遇的真实差异
非标机械设计:弹簧校核计算(内含选型计算资料)
如何做好基层的团队管理
阑尾炎手术多长时间?术后如何护理?
产品运营必读:抽奖体系设计全攻略
什么是boll指标?boll指标的应用和局限性有哪些?
什么是容斥原理
β-甘露聚糖酶属于生物酶制剂 在众多领域拥有广阔应用前景
怎样在银行办理社保卡的金融功能激活?
春日穿搭指南:18套街拍变身焦点,时髦好看全都有!
做u盘启动盘要多少G_做u盘启动盘详细教程【附u盘安装系统教程】
修行的金线:财富与心性的双螺旋
细节关乎生命,拒绝分心驾驶
汽车空调怎么开最省油?老司机:记住这几个方法,“告别”高油耗
先天、先验(康德)、绝对(黑格尔)、经验、超验5个哲学概念的区别
什么是组合贷款?了解组合贷款的基本条件和申请流程
清华大学MEM工程管理硕士研究生面试笔试备考全历程记录
延迟退休终落地!1980后女性的"三连击",这样规划多领20万!
基于 RT-Thread 的智能家居系统实战案例
爱唱歌的人真的更快乐?科学研究揭示唱歌的多重好处
客服响应时间如何缩短?如何用智能方案低成本&高效率提升客服响应效率?
视频项目团队管理:十大关键要素详解
巴拿马运河通行量仍未恢复到以往水平
波音737MAX空难:工程伦理的警钟
60年来,他们为中国航天事业不断提供“澎湃力量”
李云逸评《技术与德国》丨一种对德国技术的跨学科解读
服务器资源推荐配置指南