題目描述
給定一棵二叉樹耘拇,你需要計算它的直徑長度短荐。一棵二叉樹的直徑長度是任意兩個結(jié)點路徑長度中的最大值浑侥。這條路徑可能穿過根結(jié)點姜挺。
示例
示例 1:
給定二叉樹
1
/ \
2 3
/ \
4 5
返回 3, 它的長度是路徑 [4,2,1,3] 或者 [5,2,1,3]兼贸。
注意:兩結(jié)點之間的路徑長度是以它們之間邊的數(shù)目表示。
解答方法
方法一:深度優(yōu)先搜索
思路
這道題需要注意的一點是:二叉樹的直徑(即最長路徑)吃溅,不一定經(jīng)過根結(jié)點溶诞。
二叉樹的最長路徑=max{左子樹的最長路徑,右子樹的最長路徑,左子樹的深度+右子樹的深度}
代碼
class Solution:
def diameterOfBinaryTree(self, root: TreeNode) -> int:
if root is None:
return 0
res = self.depth(root.left) + self.depth(root.right)
return max(self.diameterOfBinaryTree(root.left), self.diameterOfBinaryTree(root.right), res)
def depth(self,root):
if root is None:
return 0
return 1 + max(self.depth(root.left), self.depth(root.right))