package BinaryTree
type diameterRet struct {
height, diameter int
}
func diameterOfBinaryTree(root *TreeNode) int {
return diameterFunc(root).diameter
}
func diameterFunc(root *TreeNode) diameterRet {
if root == nil {
return diameterRet{
height: 0,
diameter: 0,
}
}
leftRet := diameterFunc(root.Left)
rightRet := diameterFunc(root.Right)
return diameterRet{
height: max(leftRet.height, rightRet.height) + 1,
diameter: max(leftRet.diameter, rightRet.diameter, leftRet.height+rightRet.height),
}
}