Leetcode 687. 最长同值路径

题目描述

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

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

示例 1:

输入:

          5
         / \
        4   5
       / \   \
      1   1   5

输出:

2

示例 2:

输入:

          1
         / \
        4   5
       / \   \
      4   4   5

输出:

2

注意: 给定的二叉树不超过10000个结点。 树的高度不超过1000。

解法

不妨定义findMax函数表示每个节点的最长单边路径值(所谓单边路径,即当前节点与左子树节点构成的路径,或当前节点与右子树节点构成的路径),根据某一个节点的左子节点findMax值,和右子节点findMax值,即可获得当前节点的同值路径。则遍历二叉树对每个节点的左右子节点求出findMax值,即可获得该二叉树中的最大同值路径。

class Solution(object):
    def longestUnivaluePath(self, root):
        """
        :type root: TreeNode
        :rtype: int
        """
        self.ret=0
        def findMax(root):
            if not root:
                return 0
            llen=findMax(root.left)
            rlen=findMax(root.right)
            llen=llen+1 if root.left and root.left.val==root.val else 0
            rlen=rlen+1 if root.right and root.right.val==root.val else 0
            self.ret=max(self.ret,llen+rlen)
            return max(llen,rlen)
        findMax(root)
        return self.ret
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

  • 给定一个二叉树,找到最长的路径,这个路径中的每个节点具有相同值。 这条路径可以经过也可以不经过根节点。 注意:两个...
    WindMajor阅读 8,378评论 1 2
  • 给定一个二叉树,找到最长的路径,这个路径中的每个节点具有相同值。 这条路径可以经过也可以不经过根节点。 注意:两个...
    泡泡爱上巧克力_7122阅读 4,280评论 0 0
  • 题目描述 给定一个二叉树,找到最长的路径,这个路径中的每个节点具有相同值。 这条路径可以经过也可以不经过根节点。 ...
    zhipingChen阅读 2,286评论 0 1
  • 当你初学编程时,通常是将数组作为 “主要的数据结构”来学习的。 最终,你也会学习到哈希表(hash tables)...
    唐先僧阅读 7,921评论 0 10
  • 更多干货就在我的个人博客 BlackBlog.tech 欢迎关注!也可以关注我的csdn博客:黑哥的博客谢谢大家!...
    BlackBlog__阅读 9,772评论 0 3

友情链接更多精彩内容