class Solution(object):
def countUnivalSubtrees(self, root):
"""
:type root: TreeNode
:rtype: int
"""
# 如果当前tree符合条件,则返回true,同时 self.count++
# 如果左右都是,并且值符合,则当前树符合
def helper(root):
if not root:
return True
left = helper(root.left)
right = helper(root.right)
# 接下来的判断逻辑很关键,这样写最简单,排除不满足情况的,剩下就是True
if left and right:
if root.left and root.left.val != root.val:
return False
if root.right and root.right.val != root.val:
return False
self.count += 1
return True
else:
return False
self.count = 0
helper(root)
return self.countclass Solution:
def countUnivalSubtrees(self, root):
"""
:type root: TreeNode
:rtype: int
"""
def helper(root):
if not root: return True
left = helper(root.left)
right = helper(root.right)
if left and right:
# 这样写就冗杂很多
if root.left and root.right:
if root.left.val == root.right.val == root.val:
self.ret += 1
return True
elif not root.left and not root.right:
self.ret += 1
return True
elif root.left:
if root.left.val == root.val:
self.ret += 1
return True
else:
if root.right.val == root.val:
self.ret += 1
return True
return False
self.ret = 0
helper(root)
return self.ret