bool isValidBST(struct TreeNode* root ) {
// write code here
if (root == NULL)
return true;
struct TreeNode* leftmax = root->left, *rightmin = root->right;
if (leftmax != NULL) {
while (leftmax->right != NULL)
leftmax = leftmax->right;
if (leftmax->val > root->val )
return false;
}
if (rightmin != NULL) {
while (rightmin->left != NULL)
rightmin = rightmin->left;
if (rightmin->val < root->val)
return false;
}
if (root->left == NULL || (root->left->val < root->val &&
isValidBST(root->left )) )
if (root->right == NULL || (root->right->val > root->val &&
isValidBST(root->right )) )
return true;
return false;
}