给定一个二叉树,统计该二叉树数值相同的子树个数。
同值子树是指该子树的所有节点都拥有相同的数值。
示例:
输入: root = [5,1,5,5,5,null,5]
5
/ \
1 5
/ \ \
5 5 5
输出: 4
来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/count-univalue-subtrees
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。
思路:
同值子树有两种可能:
1. 叶节点必然是一个同值子树
2. 左右孩子节点都是一个同值子树的根节点,而且当前节点的值跟左右孩子节点都相同
根据这两种可能,写递归实现。
# 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 countUnivalSubtrees(self, root):
"""
:type root: TreeNode
:rtype: int
"""
if not root:
return 0
res = self.countUnivalSubtrees(root.left) + self.countUnivalSubtrees(root.right)
is_uni = self.is_Uni(root) #查两个条件
return res + 1 if is_uni else res
def is_Uni(self, node):
res = True
if node.left:
res &= self.is_Uni(node.left) and node.val == node.left.val
if node.right:
res &= self.is_Uni(node.right) and node.val == node.right.val
return res