解题思路:验证合法的BST,采用递归的方式,分别检验左子树和右子树是否满足要求即可,但是会出现这种情况:
10
5 15
6 20
所以要在递归判断的时候,带上上下限,判断左子树的时候,其上限为root->val,判断右子树时,其下限为root->val
如果根节点值小于上限或者大于下限则不合法
bool isValidBST(struct TreeNode* root)
{
return isValidBST(root, LONG_MIN, LONG_MAX);
}
bool isValidBST(struct TreeNode* root, long min, long max)
{
if (!root)
return true;
if (root->val <= min || root->val >= max)
return false;
return isValidBST(root->left, min, root->val) && isValidBST(root->right, root->val, max);
}