bool validBST(TreeNode *root, int minVal, int maxVal) { if (root == NULL) return true; if (!(root->val > minVal && root->val < maxVal)) return false; return validBST(root->left, minVal, root->val) && validBST(root->right, root->val, maxVal); }
bool validBST(TreeNode *root, bool minBound, int min, bool maxBound, int max) { if (root == NULL) return true; if (minBound && min >= root->val) return false; if (maxBound && max <= root->val) return false; return validBST(root->left, minBound, min, true, root->val) && validBST(root->right, true, root->val, maxBound, max); }
bool validBST(TreeNode* root, int& minVal, int& maxVal) { minVal = maxVal = root->val; int tmpMinVal, tmpMaxVal; if (root->left != NULL) { bool left = validBST(root->left, tmpMinVal, tmpMaxVal); if (left == false || tmpMaxVal >= root->val) return false; minVal = min(minVal, tmpMinVal); } if (root->right != NULL) { bool right = validBST(root->right, tmpMinVal, tmpMaxVal); if (right == false || tmpMinVal <= root->val) return false; maxVal = max(maxVal, tmpMaxVal); } return true; }
bool isValidBST(TreeNode *root) { return validBST(root, false, 0, false, 0); }
bool isValidBST(TreeNode *root) { return validBST(root, INT_MIN, INT_MAX); }
bool isValidBST(TreeNode* root) { if (root == NULL) return true; int minVal, maxVal; return validBST(root, minVal, maxVal); }