3. Given the following Go code snippet, what is the diameter of the binary tree?
type TreeNode struct {
Val int
Left *TreeNode
Right *TreeNode
}
root := &TreeNode{Val: 1}
root.Left = &TreeNode{Val: 2}
root.Right = &TreeNode{Val: 3}
root.Left.Left = &TreeNode{Val: 4}
root.Left.Right = &TreeNode{Val: 5}
// Diameter function uses height helper internally
func diameterOfBinaryTree(root *TreeNode) int {
maxDiameter := 0
var height func(node *TreeNode) int
height = func(node *TreeNode) int {
if node == nil {
return 0
}
leftHeight := height(node.Left)
rightHeight := height(node.Right)
if leftHeight+rightHeight > maxDiameter {
maxDiameter = leftHeight + rightHeight
}
if leftHeight > rightHeight {
return leftHeight + 1
}
return rightHeight + 1
}
height(root)
return maxDiameter
}
fmt.Println(diameterOfBinaryTree(root))