python解决求二叉树的最长同值路径问题

文章讲述了如何通过递归方法在二叉树中寻找最长的同值路径,将复杂问题分解为子问题,给出了一个Python类的示例代码,展示了从根节点开始遍历并计算路径长度的过程。
摘要由CSDN通过智能技术生成

对于给定的一颗二叉树,需要找到最长的路径,并且该路径上的每个节点具有相同的值的问题,对于寻找到的这条路径可以经过根节点也可以不经过根节点,两个节点之间的路径长度是由他们的变数来表示的,给定如下图的二叉树

添加图片注释,不超过 140 字(可选)

添加图片注释,不超过 140 字(可选)

给定的两颗二叉树的最长同值路径输出都为2。

给定问题的最长同值路径,想通过一个函数来对整个二叉树求解的话是较为复杂的,但是如果只对一个节点求同值路径的话,思路则较为清晰,这样就可以把这个复杂的原始问题分解成为了规模较小的子问题,所以考虑使用递归算法,以如下的二叉树作为例子,详细讲解递归函数的执行过程。

添加图片注释,不超过 140 字(可选)

添加图片注释,不超过 140 字(可选)

如上图显示,该图显示的是从执行A递归函数到最终返回所要求的最长同值路径的数值。A(5)会先入栈,根节点5的左子节点是4,然后A(4)入栈,节点4的左子节点是1,A(1)入栈,节点1的左子节点是空节点,所以A(NULL)入栈,最后A(NULL)的返回值是0,返回给上层,返回的0对应的是A(1)的left是0,此时执行A(1)函数内的right=self.A(root.right),即A(NULL)入栈。

添加图片注释,不超过 140 字(可选)

返回的0是A(1)函数中的right=0,此时A(1)函数可以执行语句return max(left,right),返回给上层0,并且A(1)出栈,如下图:

添加图片注释,不超过 140 字(可选)

返回的0是A(4)函数中的left=0,此时执行的是A(4)函数中的right=slef.A(root.right),节点4的右子节点是空节点,即A(NULL)入栈

添加图片注释,不超过 140 字(可选)

然后返回的0是A(4)函数中的right=0,此时A(4)函数可以执行语句return max(left,right),返回给上层0,A(4)出栈。

添加图片注释,不超过 140 字(可选)

使用python的代码实现如下:

class Solution(object):
    def main(self, root):   #主函数main
        self.max_length=0 #全局变量,用于保存当前最长同值路径
        self.A(root)
        return self.max_length
    def A(self,root):    #被调函数,也是递归函数
        if not root: 
            return 0
        left=self.A(root.left)
        right=self.A(root.right)
        if root.left and root.left.val==root.val:
            left+=1
        else:
            left=0
        if root.right and root.right.val==root.val:
            right+=1
        else:
            right=0
        self.max_length=max(self.max_length,left+right)
        return max(left,right) #返回给上层的是左右子路径最长同值路径

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值