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))
  • 相关阅读:
    python基础7
    python基础7
    十大经典预测算法(一)----线性回归
    RNN-循环神经网络
    CNN之经典卷积网络框架原理
    卷积神经网络CNN
    决策树的生成
    欠拟合、过拟合及解决方法
    决策树
    KD树
  • 原文地址:https://www.cnblogs.com/tsdblogs/p/9977364.html
Copyright © 2011-2022 走看看