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);
 }
Exemplo n.º 3
0
		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);
 }
Exemplo n.º 6
0
		bool isValidBST(TreeNode* root) {
			if (root == NULL) return true;
			int minVal, maxVal;
			return validBST(root, minVal, maxVal);
		}