题目描述
判断给出的二叉树是否是一个二叉搜索树(BST)
二叉搜索树的定义如下
- 一个节点的左子树上节点的值都小于自身的节点值
- 一个节点的右子树上节点的值都小于自身的节点值
- 所有节点的左右子树都必须是二叉搜索树
如果你不清楚“{1,#,2,3}"的含义的话,请继续阅读
我们用如下方法将二叉树序列化:
二叉树的序列化遵循层序遍历的原则,”#“代表该位置是一条路径的终结,下面不再存在结点。
例如:
1↵ / ↵ 2 3↵ /↵ 4↵ ↵ 5
上述的二叉树序列化的结果是:"{1,2,3,#,#,4,#,#,5}".
解题思路
/**
* Definition for binary tree
* 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 solve(root, INT_MIN, INT_MAX);
}
bool solve(TreeNode *root, int lower, int upper){
if(root == NULL)
return true;
if(root->val <= lower || root->val >= upper)
return false;
else //给每个节点更新它可以的范围
return solve(root->left, lower, root->val) && solve(root->right, root->val, upper);
}
};