543. 二叉树的直径
程序员文章站
2022-03-03 10:34:41
...
给定一棵二叉树,你需要计算它的直径长度。一棵二叉树的直径长度是任意两个结点路径长度中的最大值。这条路径可能穿过根结点。
示例 :
给定二叉树
1 / \ 2 3 / \ 4 5
返回 3, 它的长度是路径 [4,2,1,3] 或者 [5,2,1,3]。
注意:两结点之间的路径长度是以它们之间边的数目表示。
# Definition for a binary tree node.
class TreeNode:
def __init__(self, x):
self.val = x
self.left = None
self.right = None
# 径长度是任意两个结点路径长度中的最大值。这条路径可能穿过根结点。
class Solution:
MAX = 0
def diameterOfBinaryTree(self, root: TreeNode) -> int:
self.maxDepth(root)
return self.MAX
# 递归法
def maxDepth(self, root: 'TreeNode') -> 'int':
if root is None: return 0
left = self.maxDepth(root.left)
right = self.maxDepth(root.right)
# 这条路径可能穿过根结点(left + right),也有可能不穿过根结点(self.MAX)
self.MAX = max(self.MAX, left + right)
return max(left, right) + 1
if __name__ == '__main__':
s = Solution()
root = TreeNode(1)
root.left = TreeNode(2)
root.right = TreeNode(2)
root.left.left = TreeNode(3)
root.left.right = TreeNode(4)
root.right.left = TreeNode(4)
root.right.right = TreeNode(3)
'''
输入:
1
/ \
2 2
/ \ / \
3 4 4 3
'''
print(s.diameterOfBinaryTree(root))
上一篇: Leetcode 543:二叉树的直径
下一篇: HTML5