验证二叉搜索树
问题描述
给你一个二叉树的根节点 root ,判断其是否是一个有效的二叉搜索树。
有效 二叉搜索树定义如下:
节点的左子树只包含 严格小于 当前节点的数。
节点的右子树只包含 严格大于 当前节点的数。
所有左子树和右子树自身必须也是二叉搜索树。
样例输入
cpp
root = [5,1,4,null,null,3,6]
样例输出
cpp
false
评测用例规模与约定
树中节点数目范围在[1, 10^4] 内
-2^31 <= Node.val <= 2^31 - 1
解析
依旧老朋友递归遍历左右子树看是否符合二叉搜索树规则,
如果节点的值比最大的还大或者比最小的还小肯定不行。
参考程序
cpp
class Solution {
public:
bool solve(TreeNode* root,long a,long b){
if(root==nullptr)return true;
if(root->val>=b||root->val<=a)return false;
return(solve(root->left,a,root->val)&&solve(root->right,root->val,b));
}
bool isValidBST(TreeNode* root) {
return solve(root,LONG_MIN,LONG_MAX);
}
};
难度等级
⭐️⭐️⭐️(1~10星)
以个人刷题整理为目的,如若侵权,请联系删除~