
解题思路:递归解决
递归结束条件:传入结点为NULL
//该子树上所有的值都应该小于val
//递归实现:递归结束条件为传入结点为NULL
//返回递归调用自身进入左右子树的结果
int compLeft(struct TreeNode* node, int val) {
if(!node)
return 1;
return (node->val < val) && compLeft(node->left, val) && compLeft(node->right, val);
}
//该子树上所有的值都应该大于val
int compRight(struct TreeNode* node, int val) {
if(!node)
return 1;
return (node->val > val) && compRight(node->left, val) && compRight(node->right, val);
}
bool isValidBST(struct TreeNode* root){
if(!root)
return 1;
return compLeft(root->left, root->val) && compRight(root->right, root->val) && isValidBST(root->right) && isValidBST(root->left);
}

解题思路2:递归解决
int validate(struct TreeNode* node, const long min, const long max) {
if(!node)
return 1;
if(node->val <= min || node->val >= max)
return 0;
return validate(node->left, min, node->val) && validate(node->right, node->val, max);
}
bool isValidBST(struct TreeNode* root){
return validate(root, LONG_MIN, LONG_MAX);
}

解题思路3:数组解决
void traversal(struct TreeNode* node, int* arr, int* size) {
if(!node)
return;
traversal(node->left, arr, size);
arr[(*size)++] = node->val;
traversal(node->right, arr, size);
}
bool isValidBST(struct TreeNode* root){
int* arr = (int*)malloc(sizeof(int) * 10000);
int size = 0;
if(!root)
return 1;
traversal(root, arr, &size);
int i;
printf("%d",size);
for(i = 1; i < size; i++) {
if(arr[i-1] >= arr[i])
return 0;
}
return 1;
}