Leetcode 333. Largest BST Subtree (Medium) (cpp)

来源:互联网 发布:w3c php手册下载 编辑:程序博客网 时间:2024/05/19 10:34

Leetcode 333. Largest BST Subtree (Medium) (cpp)

Tag: Tree

Difficulty: Medium


/*333. Largest BST Subtree (Medium)Given a binary tree, find the largest subtree which is a Binary Search Tree (BST), where largest means subtree with largest number of nodes in it.Note:A subtree must include all of its descendants.Here's an example:10/ \5  15/ \   \1   8   7The Largest BST Subtree in this case is the highlighted one.The return value is the subtree's size, which is 3.Hint:You can recursively use algorithm similar to 98. Validate Binary Search Tree at each node of the tree, which will result in O(nlogn) time complexity.*//*** Definition for a binary tree node.* struct TreeNode {*     int val;*     TreeNode *left;*     TreeNode *right;*     TreeNode(int x) : val(x), left(NULL), right(NULL) {}* };*/class Solution {public:int largestBSTSubtree(TreeNode* root) {int res = 0;largestBSTSubtree(root, res);return res;}private:vector<int> largestBSTSubtree(TreeNode* root, int& res) {if (root == NULL) {return{ 0,0,0 };}else if (root->left == NULL && root->right == NULL) {res = max(res, 1);return{ 1, root->val, root->val };}vector<int> l = largestBSTSubtree(root->left, res), r = largestBSTSubtree(root->right, res);if (l[0] != -1 && r[0] != -1) {if ((l[0] == 0 || root->val > l[2]) && (r[0] == 0 || root->val < r[1])) {res = max(res, l[0] + r[0] + 1);int small = l[1] == 0 ? root->val : l[1], large = r[2] == 0 ? root->val : r[2];return{ l[0] + r[0] + 1, small, large };}}return{ -1,0,0 };}};


0 0
原创粉丝点击