LeetCode 543
需要求的是: The diameter of a binary tree is the length of the longest path between any two nodes in a tree. This path may or may not pass through the root.
那么经过某个点的最长路径可以是,他的左边到自己的最长路径(左高度 -1),加上自己,加上右边到自己的最长路径(右高度-1)。
可以考虑边遍历这个树,边求出左高,右高,和经过自己的最大长度,然后都返回,然后一遍比较一遍保留,到最后的就可以得到结果。
def diameterOfBinaryTree(self, root: TreeNode) -> int:
if root == None: return 0
l, r, d = Solution.traverseTree(root)
return max(l+r-1, d)
@staticmethod
def traverseTree(root: TreeNode):
if root == None: return 0, 0, 0
ll, lr, ld = Solution.traverseTree(root.left)
rl, rr, rd = Solution.traverseTree(root.right)
cl = max(ll,lr)
cr = max(rl,rr)
cd = max(cl + cr + 1, ld, rd)
return cl + 1, cr + 1, cd