zoukankan      html  css  js  c++  java
  • python刷LeetCode:543. 二叉树的直径

    难度等级:简单

    题目描述:

    给定一棵二叉树,你需要计算它的直径长度。一棵二叉树的直径长度是任意两个结点路径长度中的最大值。这条路径可能穿过根结点。

    示例 :
    给定二叉树

         1
        /
      2    3
     /
    4  5
    返回 3, 它的长度是路径 [4,2,1,3] 或者 [5,2,1,3]。

    注意:两结点之间的路径长度是以它们之间边的数目表示。

    来源:力扣(LeetCode)
    链接:https://leetcode-cn.com/problems/diameter-of-binary-tree
    著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。

    解题思路:

    使用双重递归,用一个中间变量来保存最大直径。

    计算每个节点为根节点的左右子树高度之和最大值。注意:不是原根节点的,是所有的。

    解题代码:

    # Definition for a binary tree node.
    # class TreeNode:
    #     def __init__(self, x):
    #         self.val = x
    #         self.left = None
    #         self.right = None
    
    class Solution:
        # 双层递归,每个节点都计算以其为根节点的最大树高度
        def __init__(self):
            self.max_ = 0
    
        def max_height(self, root):
            if not root:
                return 0
            left = self.max_height(root.left)  # 递归求左子树最大直径
            right = self.max_height(root.right)  # 求右子树最大直径
            self.max_ = max(self.max_, left+right)  # 更新最大直径值
            return max(left, right) + 1  # 最长的子树方向+1,得到树的最大直径
            
        def diameterOfBinaryTree(self, root: TreeNode) -> int:
            self.max_height(root)  # 递归求最大直径,并保存到self.max中
            return self.max_
  • 相关阅读:
    hdu 2137
    hdu 2059
    hdu 2175
    hdu 1297
    hdu 1702
    hdu 1212
    hdu 1397
    [转]常见的碱性食品有哪些?
    [转]C#反射
    每个人都有自己的未来
  • 原文地址:https://www.cnblogs.com/jaysonteng/p/12454617.html
Copyright © 2011-2022 走看看