欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

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 Python