Leetcode 687. 最长同值路径

题目描述

给定一个二叉树,找到最长的路径,这个路径中的每个节点具有相同值。 这条路径可以经过也可以不经过根节点。

注意:两个节点之间的路径长度由它们之间的边数表示。

递归

最长路径值是由一个节点的左连续边长度,加上右连续边长度之和。不妨以 path(node) 函数表示 node 节点为端点的最长连续节点个数,则遍历二叉树,找到左、右连续节点个数和的最大值即可。

# Definition for a binary tree node.
# class TreeNode:
#     def __init__(self, x):
#         self.val = x
#         self.left = None
#         self.right = None

class Solution:
    def longestUnivaluePath(self, root: TreeNode) -> int:
        self.ret=0
        def path(node):
            if not node:
                return 0
            l=path(node.left)
            r=path(node.right)
            l=l if node.left and node.left.val==node.val else 0
            r=r if node.right and node.right.val==node.val else 0            
            self.ret=max(l+r,self.ret)
            return max(l,r)+1
        path(root)
        return self.ret

代码中以 self.ret 表示路径长度,边数相对于点数减一,所以 self.ret=l+r。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

友情链接更多精彩内容