给定一个二叉树,找到最长的路径,这个路径中的每个节点具有相同值。 这条路径可以经过也可以不经过根节点。
注意:两个节点之间的路径长度由它们之间的边数表示。
示例 1:
输入:
5
/ \
4 5
/ \ \
1 1 5
输出:
2
示例 2:
输入:
1
/ \
4 5
/ \ \
4 4 5
输出:
2
注意: 给定的二叉树不超过10000个结点。 树的高度不超过1000。
# 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