在二叉搜索树中:
1.若任意结点的左子树不空,则左子树上所有结点的值均不大于它的根结点的值。
2. 若任意结点的右子树不空,则右子树上所有结点的值均不小于它的根结点的值。
3.任意结点的左、右子树也分别为二叉搜索树。
/**
* Definition for a binary tree node.
* struct TreeNode {
* int val;
* TreeNode *left;
* TreeNode *right;
* TreeNode(int x) : val(x), left(NULL), right(NULL) {}
* };
*/
//二叉搜索树
class Solution {
public:
bool isValidBST(TreeNode* root) {
return dfs(root,LONG_MIN, LONG_MAX );
}
bool dfs(TreeNode* root, long long low, long long high){
if(root == NULL){
return true;
}
if(low >= root->val || high <= root -> val){
return false;
}
return dfs(root->left, low, root->val) && dfs(root -> right, root -> val, high);
}
};
/**
* Definition for a binary tree node.
* struct TreeNode {
* int val;
* TreeNode *left;
* TreeNode *right;
* TreeNode(int x) : val(x), left(NULL), right(NULL) {}
* };
*/
//二叉搜索树,中序遍历
class Solution {
public:
vector<int> ans;
bool isValidBST(TreeNode* root) {
if(root == NULL){
return true;
}
dfs(root);
for(int i = 0; i < ans.size() - 1; i++){
if(ans[i] >= ans[i + 1]){
return false;
}
}
return true;
}
void dfs(TreeNode* root){
if(root){
dfs(root -> left);
ans.push_back(root->val);//函数将一个新的元素加到vector的最后面,位置为当前最后一个元素的下一个元素
dfs(root -> right);
}
}
};