leetcode 687. 最長同值路徑(python)
阿新 • • 發佈:2018-11-07
給定一個二叉樹,找到最長的路徑,這個路徑中的每個節點具有相同值。 這條路徑可以經過也可以不經過根節點。
注意:兩個節點之間的路徑長度由它們之間的邊數表示。
示例 1:
輸入:
5 / \ 4 5 / \ \ 1 1 5
輸出:
2
示例 2:
輸入:
1 / \ 4 5 / \ \ 4 4 5
輸出:
2
注意: 給定的二叉樹不超過10000個結點。 樹的高度不超過1000。
解題思路:
如果當前節點值不和父節點相同,則返回0;若相同,則返回左右子樹中邊數較多的一個,加1是因為當他與父節點的值相同時,和父節點還有一個連線。maxLen用來動態記錄邊數最多的路徑。
# 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): maxLen = 0 def longestUnivaluePath(self, root): """ :type root: TreeNode :rtype: int """ if not root: return 0 self.getMaxLen(root, root.val) return self.maxLen def getMaxLen(self, root, val): if not root: return 0 left = self.getMaxLen(root.left, root.val) right = self.getMaxLen(root.right, root.val) self.maxLen = max(self.maxLen, left + right) if root.val == val: return max(left, right) + 1 return 0