📜  在给定的二叉树中找到最大的完美子树(1)

📅  最后修改于: 2023-12-03 14:51:32.668000             🧑  作者: Mango

在给定的二叉树中找到最大的完美子树
问题描述

给定一棵二叉树,求其中的最大完美子树。完美子树是指该子树内所有节点的值相等。该子树的大小指子树中节点的个数。

解题思路

该题可以采用递归的方法解决。首先判断根节点左右子树的最大完美子树,然后求得当前子树的最大完美子树。需要注意的是,当前子树的最大完美子树有以下几种情况:

  1. 以当前节点为根节点的子树为最大完美子树;
  2. 左子树的最大完美子树为该子树的最大完美子树;
  3. 右子树的最大完美子树为该子树的最大完美子树。
代码实现

以下是 Python 实现代码:

class TreeNode:
    def __init__(self, val=0, left=None, right=None):
        self.val = val
        self.left = left
        self.right = right


class Solution:
    def __init__(self):
        self.res = 0
    
    def largestSubtree(self, root: TreeNode) -> int:
        self.dfs(root)
        return self.res
        
    def dfs(self, node):
        if not node:
            return 0
        
        left_size = self.dfs(node.left)
        right_size = self.dfs(node.right)
        
        if node.left and node.left.val == node.val:
            left_size += 1
        else:
            left_size = 0
        
        if node.right and node.right.val == node.val:
            right_size += 1
        else:
            right_size = 0
        
        cur_size = left_size + right_size + 1
        
        self.res = max(self.res, cur_size)
        
        return cur_size
复杂度分析

该算法使用了递归的方法来解决问题。时间复杂度为 $O(n)$,其中 $n$ 表示二叉树中节点的个数。

空间复杂度为 $O(h)$,其中 $h$ 表示树的深度。