題目:二叉樹的直徑
給定一棵二叉樹沪曙,你需要計(jì)算它的直徑長(zhǎng)度。一棵二叉樹的直徑長(zhǎng)度是任意兩個(gè)結(jié)點(diǎn)路徑長(zhǎng)度中的最大值密任。這條路徑可能穿過根結(jié)點(diǎn)毅厚。
示例1:
給定二叉樹
1
/ \
2 3
/ \
4 5
返回 3, 它的長(zhǎng)度是路徑 [4,2,1,3] 或者 [5,2,1,3]。
思路
- 一個(gè)最長(zhǎng)的路徑过咬,可以看作是一個(gè)根節(jié)點(diǎn)的左子樹最深的遍歷+右子樹最深的遍歷大渤。
- 用dfs搜索左右子樹,獲取最大結(jié)果掸绞。
實(shí)現(xiàn)
/**
* Definition for a binary tree node.
* type TreeNode struct {
* Val int
* Left *TreeNode
* Right *TreeNode
* }
*/
func diameterOfBinaryTree(root *TreeNode) int {
ans := 1
dp(root, &ans)
return ans - 1
}
func dp(node *TreeNode, maxDepth *int) int {
if node == nil {
return 0
}
l := dp(node.Left, maxDepth)
r := dp(node.Right, maxDepth)
if *maxDepth < l+r+1 {
*maxDepth = l + r + 1
}
if l > r {
return l + 1
}
return r + 1
}