333. Largest BST Subtree (Medium) - TengnanYao/daily_leetcode GitHub Wiki
# Definition for a binary tree node.
# class TreeNode:
# def __init__(self, val=0, left=None, right=None):
# self.val = val
# self.left = left
# self.right = right
class Solution:
def largestBSTSubtree(self, root: Optional[TreeNode]) -> int:
def dfs(node):
if not node:
return 0, inf, -inf
l, l_min, l_max = dfs(node.left)
r, r_min, r_max = dfs(node.right)
if l_max < node.val < r_min:
return l + r + 1, min(l_min, node.val), max(r_max, node.val)
else:
return max(l, r), -inf, inf
return dfs(root)[0]