jinhuang1102

687. Longest Univalue Path

Mar 17th, 2019
102
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Python 1.54 KB | None | 0 0
  1. """
  2. 687. Longest Univalue Path
  3. http://www.cnblogs.com/grandyang/p/7636259.html
  4. """
  5. class Solution(object):
  6.     def __init__(self):
  7.         self.res = 0
  8.        
  9.     def helper(self, node):
  10.         if not node:   # 递归的基本条件是 当root为空时,返回0到上一层
  11.             return 0
  12.        
  13.         left = self.helper(node.left)           # 首先,对其左右节点调用递归函数。得到其左右子树的最大相同路径长度。
  14.         right = self.helper(node.right)
  15.        
  16.         # 现在左右子树要与 根节点 组成path
  17.         if node.left and node.val == node.left.val: # 如果,左子树存在并且左子树的val == root的value,那么左子树的最大相同路径+1
  18.             left += 1
  19.         else:                                       # 如果,左子树不存在或者左子树的val != root的value, 那么左子树的最大相同路径为0
  20.             left = 0
  21.            
  22.         if node.right and node.val == node.right.val:
  23.             right += 1
  24.         else:
  25.             right = 0
  26.        
  27.         self.res = max(self.res, left + right)      # 如果,与根节点组成path以后的值大于 res 那么就更新 res
  28.        
  29.         return max(left, right)             # 返回的是以该结点为终点的最长路径长度,这样回溯的时候,我们还可以继续连上其父结点
  30.        
  31.     def longestUnivaluePath(self, root):
  32.         """
  33.        :type root: TreeNode
  34.        :rtype: int
  35.        """
  36.         self.helper(root)
  37.         return self.res
Add Comment
Please, Sign In to add comment