zoukankan      html  css  js  c++  java
  • [ 力扣活动0310 ] 543. 二叉树的直径

    <>

    题目描述


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

    示例 :
    给定二叉树

              1
             / 
            2   3
           /      
          4   5    
    

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

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

    解题思路 


    我的思路

    要使两个结点路径长度最长,只需要求出每个结点左边的边数 + 右边的边数,迭代出最大值即可。

    简单说就是从左边最远处走向右边最远处即为路径最长。

    但这样会存在一个问题,每一个结点都要求边数,会有大量的重复运算,该如何解决?

    # Definition for a binary tree node.
    # class TreeNode(object):
    #     def __init__(self, x):
    #         self.val = x
    #         self.left = None
    #         self.right = None
    
    class Solution(object):
        def diameterOfBinaryTree(self, root):
            """
            :type root: TreeNode
            :rtype: int
            """
            def layers(node):
                if not node:
                    return 0
                return 1+max(layers(node.left),layers(node.right))
            if not root:
                return 0
    
    
            # return layers(root.right)
            stack = [root]
            ret = -1
            while len(stack):
                node = stack.pop()
                left , right = 0,0
                if node.left:
                    left = layers(node.left)
                    stack.append(node.left)
                if node.right:
                    right = layers(node.right)
                    stack.append(node.right)
                if left+right > ret:
                    ret = left+right
            return ret
    View Code

    总结


  • 相关阅读:
    javascript高级知识点——函数原型
    javascript高级知识点——临时作用域
    javascript中的部分函数应用
    javascript高级知识点——闭包
    使用HIPQTools播放视频—记录
    wpa_suppliant编译小结
    内存溢出和内存泄漏
    C代码规范
    Makefiel(一)
    Lua语言
  • 原文地址:https://www.cnblogs.com/remly/p/12465267.html
Copyright © 2011-2022 走看看