leetcode_250 统计同值子树

239 阅读1分钟

要求

给定一个二叉树,统计该二叉树数值相同的子树个数。

同值子树是指该子树的所有节点都拥有相同的数值。

示例:

输入: 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

image.png

解题思路:同值子树有两种可能:叶节点必然是一个同值子树左右孩子节点都是一个同值子树的根节点,而且当前节点的值跟左右孩子节点都相同 ,注意判断同值子树的写法;还有一种思路,对树进行遍历,遍历到当前节点的时候,我们对当前节点进行中序遍历,判断遍历完的数据是不是都是同一个值,但是效率较低。