📅  最后修改于: 2023-12-03 14:51:32.668000             🧑  作者: Mango
给定一棵二叉树,求其中的最大完美子树。完美子树是指该子树内所有节点的值相等。该子树的大小指子树中节点的个数。
该题可以采用递归的方法解决。首先判断根节点左右子树的最大完美子树,然后求得当前子树的最大完美子树。需要注意的是,当前子树的最大完美子树有以下几种情况:
以下是 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$ 表示树的深度。