1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25
|
class Solution { public: int largestBSTSubtree(TreeNode* root) { return get<0>(dfs(root)); }
tuple<int, int, int> dfs(TreeNode *p) { // {以root为根的这棵树的最大BST子树的结点数,最小值,最大值} if (!p) return {0, INT_MAX, INT_MIN}; auto [ln, lmn, lmx] = dfs(p->left); auto [rn, rmn, rmx] = dfs(p->right); if (lmx >= p->val || rmn <= p->val) return {max(ln, rn), INT_MIN, INT_MAX}; return {ln + 1 + rn, min(lmn, p->val), max(rmx, p->val)}; } };
|