描述
给定一棵二叉树,你需要计算它的直径长度。一棵二叉树的直径长度是任意两个结点路径长度中的最大值。这条路径可能穿过根结点。
示例 :
给定二叉树
1
/ \
2 3
/ \
4 5
返回3, 它的长度是路径 [4,2,1,3] 或者[5,2,1,3]。
注意:两结点之间的路径长度是以它们之间边的数目表示。
思路
递归获取 节点两边的 最大深度l, r, 然后定义一个最大长度的变量maxLength 随时获取每个节点的r+l 和maxLength 的最大值并更新maxLength
实现
func DiameterOfBinaryTree(root *TreeNode) int {
if root == nil{
return 0
}
maxLength := 0
Depth(root, &maxLength)
return maxLength
}
func Depth(root *TreeNode, maxLength *int)int{
if root == nil{
return 0
}
l := Depth(root.Left, maxLength)
r := Depth(root.Right, maxLength)
*maxLength = Max(l + r, *maxLength)
return Max(l, r) + 1
}
func Max(a, b int)int{
if a >= b{
return a
}else{
return b
}
}