验证二叉搜索树
链接
给你一个二叉树的根节点 root ,判断其是否是一个有效的二叉搜索树。
有效 二叉搜索树定义如下:
节点的左子树只包含 小于 当前节点的数。
节点的右子树只包含 大于 当前节点的数。
所有左子树和右子树自身必须也是二叉搜索树。
示例 1:
输入:root = [2,1,3]
输出:true
示例 2:
输入:root = [5,1,4,null,null,3,6]
输出:false
解释:根节点的值是 5 ,但是右子节点的值是 4 。
提示:
树中节点数目范围在[1, 104] 内
-2^31 <= Node.val <= 2^31 - 1
思路
- 返回值——bool
参数——节点 - 终止条件
为空 - 单次递归
中序排列——左中右,二叉搜索树按此顺序排列为从大到小不重复排列
long long maxVal=LONG_MIN;
//定义一个值,作为比较值,放在函数外,作为全局参数,不会因为递归结束而回到原来值
//值范围可能等于int最小值,所以定义最小值要小于int型,为long long
bool left=isValidBST(root->left);
if(root->val>maxVal) maxVal=root->val;
else return false;
bool right=isValidBST(root->right);
代码
class Solution {
public:
long long maxVal=LONG_MIN;
bool isValidBST(TreeNode* root) {
if(root==NULL) return true;
bool left=isValidBST(root->left);
if(root->val>maxVal) maxVal=root->val;
else return false;
bool right=isValidBST(root->right);
return left&right;
}
};