方案一:本方法,先遍历左子树,然后又子树。
/**
* Definition for binary tree
* struct TreeNode {
* int val;
* TreeNode *left;
* TreeNode *right;
* TreeNode(int x) : val(x), left(NULL), right(NULL) {}
* };
*/
class Solution {
private:
bool isvalid(TreeNode *node,long long lnum,long long rnum)
{
if(node==NULL)
return true;
if(node->left!=NULL)
{
if((node->left->val<node->val)&&(node->val>lnum)
&&(node->val<rnum)&&isvalid(node->left,lnum,node->val))
{
if(node->right!=NULL)
{
return (node->right->val>node->val)&&(node->val>lnum)
&&(node->val<rnum)&&isvalid(node->right,node->val,rnum);
}
if ((node->right==NULL)&&((node->val<=lnum)||(node->val>=rnum)))
return false;
else return true;
}
else return false;
}
if((node->left==NULL)&&((node->val<=lnum)||(node->val>=rnum)))
return false;
if(node->right!=NULL)
{
return (node->right->val>node->val)&&(node->val>lnum)
&&(node->val<rnum)&&isvalid(node->right,node->val,rnum);
}
if ((node->right==NULL)&&((node->val<lnum)||(node->val>rnum)))
return false;
else return true;
}
public:
bool isValidBST(TreeNode *root) {
return isvalid(root,LONG_LONG_MIN,LONG_LONG_MAX);
}
};
参考网上的答案:
/**
* Definition for binary tree
* struct TreeNode {
* int val;
* TreeNode *left;
* TreeNode *right;
* TreeNode(int x) : val(x), left(NULL), right(NULL) {}
* };
*/
class Solution {
private:
bool isvalid(TreeNode *node,long long lnum,long long rnum)
{
if(node==NULL)
return true;
return (node->val>lnum)&&(node->val<rnum)&&isvalid(node->left,lnum,node->val)&&
isvalid(node->right,node->val,rnum);
}
public:
bool isValidBST(TreeNode *root) {
return isvalid(root,LONG_LONG_MIN,LONG_LONG_MAX);
}
};
int型的最大值为INT_MAX( 2147483647),为了将最大值包含在内,定义long long型的整数。