[Day31]-[二叉树] 二叉树的直径
作者:方勇(gopher)
- 2022 年 4 月 30 日
本文字数:623 字
阅读完需:约 2 分钟
二叉树的直径给定一棵二叉树,你需要计算它的直径长度。一棵二叉树的直径长度是任意两个结点路径长度中的最大值。这条路径可能穿过也可能不穿过根结点。
示例 :给定二叉树
1
/ \
2 3
/ \
4 5
复制代码
返回 3, 它的长度是路径 [4,2,1,3] 或者 [5,2,1,3]。
func TestDiameterOfBinaryTree(t *testing.T) {
root := &TreeNode{ // 初始化一棵树
Val: 1,
Left: &TreeNode{
Val: 2,
Left: &TreeNode{
Val: 4,
Left: &TreeNode{
Val: 6,
},
},
Right: &TreeNode{
Val: 5,
Left: &TreeNode{
Val: 7,
},
},
},
Right: &TreeNode{
Val: 3,
},
}
var ans int // 最大直径 默认是0
var solution func(root *TreeNode) int // 解决方案呢
var max func(x, y int) int // 取最大值
var dfs func(root *TreeNode) int // 深度遍历
max = func(x, y int) int {
if x > y {
return x
}
return y
}
dfs = func(root *TreeNode) int {
if root == nil { // 递归终止条件
return 0
}
l := dfs(root.Left) // 左侧高度
r := dfs(root.Right) // 右侧高度
dept := max(l, r) + 1 // 数的最大高度
ans = max(ans, l+r) // 数的最大直径 = 左侧最大高度 + 右侧的最大高度
return dept
}
solution = func(root *TreeNode) int {
dfs(root)
return ans
}
t.Log(solution(root))
}
复制代码
划线
评论
复制
发布于: 刚刚阅读数: 2
方勇(gopher)
关注
Dead or Alive. 生存战斗是知识的源泉! 2018.11.08 加入
我是一名SRE哨兵,目前是好大夫基础架构部高级工程师。专注于 SRE,微服务、中间件的稳定性和可用性建设,整体负责好大夫服务治理云平台的设计和搭建!
评论