zoukankan      html  css  js  c++  java
  • 求二叉树中距离最大的两个节点

    给定一个二叉树,求出该二叉树中任意两个节点的最远距离(两个节点的距离是指两个节点之间边的条数,可能不过根节点。)

    如下图所示的二叉树的最远距离是3

              1
             / 
            2   3
           /      
          4   5    
    解题思路:虽然最大距离的路径可能不过当前根节点,但是总会过一个子树的根节点的。所以我们可以这么做:
    前序遍历二叉树,已当前节点为根节点,分别求出其左右子树的最大深度,相加之后存在一个数组中
    接着继续遍历左右子树,分别执行上述操作。遍历完成之后,返回数组中最大的值即可。
    代码如下:
    class TreeNode:
        def __init__(self,x,left=None,right=None):
            self.value=x
            self.left=left
            self.right=right
    
    
    class Solution:
        def __init__(self):
            self.target=[]
    
    
        def MaxDistance(self,root):
            if not root:
                return 0
            self.target.append(self.MaxDepth(root.left)+self.MaxDepth(root.right))
            self.MaxDistance(root.left)
            self.MaxDistance(root.right)
            return max(self.target)
            # return self.target
    
    
    
        def MaxDepth(self,root):
            if not root:
                return 0
            left=self.MaxDepth(root.left)
            right=self.MaxDepth(root.right)
            return 1+max(left,right)
    
    
    node4=TreeNode(4)
    node5=TreeNode(5)
    node3=TreeNode(3)
    node2=TreeNode(2,node4,node5)
    node1=TreeNode(1,node2,node3)
    s=Solution()
    print(s.MaxDistance(node1))
  • 相关阅读:
    K均值算法
    4.K均值算法应用
    js实现点击不同按钮切换内容
    vue框架中的日期组件转换为yyymmdd格式
    sessionStorage和localStorage的使用方法
    vue中使用axios
    js中的原型对象链
    web端常见测试点
    软件测试手工测试
    前端面试题vue部分
  • 原文地址:https://www.cnblogs.com/tsdblogs/p/9977364.html
Copyright © 2011-2022 走看看