Longest Univalue Path

题目链接:https://leetcode.com/problems/longest-univalue-path/
这道题没有做出来,伤心。其实就差那么一点了,最终还是没有……,特此纪念这道题。
该思路本质上后序的过程,在遍历完左右子树后,在遍历“根节点“的时候,判断“根节点“的值和右子树上的“根节点“是否相同。相同的话,则将left=left+1;否则赋值为0。同样的方法判断左子树上的“根节点“。经过上面的判断后,left+right!=0,那么left+right的路径长度为跨越“根节点“的路径长度或者是根节点和左子树的路径长度(根节点和左子树的根节点的值是相同的),又或者是“根节点“和右子树的路径长度(同理)。如果,left+right==0,那么“根节点“和左右子树的“根节点“的树都是不同的。曾经出现过的最长路径已经存储在self.longest中了。

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

class Solution(object):
    def longestUnivaluePath(self, root):
        """
        :type root: TreeNode
        :rtype: int
        """
        if root==None:
            return 0
        self.longest=0#存储全局最优
        self.postOrder(root)
        return self.longest
    def postOrder(self,root):
        if root:
            left=self.postOrder(root.left)
            right=self.postOrder(root.right)
            left=(left+1) if root.left and root.val==root.left.val else 0#该节点的值和左节点的值是相同的,那么left+1;不相等或者是左节点不存在的话,left赋值为0
            right=(right+1) if root.right and root.val==root.right.val else 0
            self.longest=max(self.longest,left+right)#和全局最优进行比较,返回较大的值
            return max(left,right)#只返回left和right,而不返回left+right(跨越根节点的路径,跨越根节点的路径如果是最长的,那么已经存储到self.longest中去了)
        return 0
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值