二叉树的直径

作者: _阿南_ | 来源:发表于2020-03-10 11:17 被阅读0次

    题目:

    给定一棵二叉树,你需要计算它的直径长度。一棵二叉树的直径长度是任意两个结点路径长度中的最大值。这条路径可能穿过根结点。
    示例 :
    给定二叉树
    
              1
             / \
            2   3
           / \     
          4   5    
    返回 3, 它的长度是路径 [4,2,1,3] 或者 [5,2,1,3]。
    注意:两结点之间的路径长度是以它们之间边的数目表示。
    

    题目的理解:

    使用分治的方式,将大问题转化为小问题。计算每一个节点的left最大直径,right最大直径,父类获取到的left或者right的最大直接就是子节点的max(left, right)。获得所有节点的最大直径后,获取最大值。

    python实现

    class Solution:    
        def diameterOfBinaryTree(self, root: TreeNode) -> int:
            if root is None:
                return 0
            
            result = list()
            
            def recursion(node: TreeNode) -> (int, int):
                if node.left is None and node.right is None:
                    result.append(0)
                    return 0, 0
                elif node.left is None:
                    left, right = recursion(node.right)
                    result.append(max(left, right) + 1)
                    return 0, max(left, right) + 1
                elif node.right is None:
                    left, right = recursion(node.left)
                    result.append(max(left, right) + 1)
                    return max(left, right) + 1, 0
                else:
                    left1, right1 = recursion(node.left)
                    left2, right2 = recursion(node.right)
                    
                    result.append(max(left1, right1) + 1 + max(left2, right2) + 1)
                    
                    return max(left1, right1) + 1, max(left2, right2) + 1
            
            recursion(root)
            
            return max(result)
    

    提交

    成绩好差

    // END 放下心中的不快,才能投入到喜欢的事情上。

    相关文章

      网友评论

        本文标题:二叉树的直径

        本文链接:https://www.haomeiwen.com/subject/emaidhtx.html