方法一:递归
利用二叉搜索树的定义
class Solution
{
public:
bool check(TreeNode* root, long long lower, long long upper)
{
if (root == nullptr)
{
return true;
}
if (root->val <= lower || root->val >= upper)
{
return false;
}
if (check(root->left, lower, root->val) == false)
{
return false;
}
if (check(root->right, root->val, upper) == false)
{
return false;
}
return true;
}
bool isValidBST(TreeNode* root)
{
return check(root, LONG_LONG_MIN, LONG_LONG_MAX);
}
};
方法二:递归
利用二叉搜索树中序遍历为单调递增序列的性质
class Solution
{
private:
vector<int> v;
public:
bool isValidBST(TreeNode* root)
{
if (root == nullptr)
{
return true;
}
if (isValidBST(root->left) == false)
{
return false;
}
if (v.empty() == false && v.back() > root->val)
{
return false;
}
else
{
v.push_back(root->val);
}
if (isValidBST(root->right) == false)
{
return false;
}
return true;
}
};