要求
给定一个二叉树,统计该二叉树数值相同的子树个数。
同值子树是指该子树的所有节点都拥有相同的数值。
示例:
输入: root = [5,1,5,5,5,null,5]
5
/ \
1 5
/ \ \
5 5 5
输出: 4
核心代码
class TreeNode:
def __init__(self, val=0, left=None, right=None):
self.val = val
self.left = left
self.right = right
class Solution:
def countUnivalSubtrees(self, root: TreeNode) -> 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
解题思路:同值子树有两种可能:叶节点必然是一个同值子树 、左右孩子节点都是一个同值子树的根节点,而且当前节点的值跟左右孩子节点都相同 ,注意判断同值子树的写法;还有一种思路,对树进行遍历,遍历到当前节点的时候,我们对当前节点进行中序遍历,判断遍历完的数据是不是都是同一个值,但是效率较低。