递归法,定义辅助函数,参数为(root, lower, upper),对于每个子树,首先判断根节点满足lower和upper bound,然后根据root->val重新设定lower和upper bound,并递归调用辅助函数。代码如下:
class Solution {
public:
bool isValidBST(TreeNode *root) {
return isvalid(root, INT_MIN, INT_MAX);
}
bool isvalid(TreeNode *root, int lower, int upper) {
if(!root) return true;
return (root->val > lower)
&& (root->val < upper)
&& isvalid(root->left, lower, root->val)
&& isvalid(root->right, root->val, upper);
}
};
迭代法,使用树的Inorder-traversal。
class Solution {
public:
bool isValidBST(TreeNode *root) {
if(root == NULL) return true;
TreeNode *cur = root, *p = NULL;
int prev = INT_MIN;
bool ret = true;
while(cur != NULL)
{
if(cur->left == NULL)
{
if(cur->val <= prev)
ret = false;
prev = cur->val;
cur = cur->right;
}
else
{
p = cur->left;
while(p->right != NULL && p->right != cur)
p = p->right;
if(p->right == NULL)
{
p->right = cur;
cur = cur->left;
}
else
{
if(cur->val <= prev)
ret = false;
prev = cur->val;
p->right = NULL;
cur = cur->right;
}
}
}
return ret;
}
};