题解 | #判断是不是二叉搜索树#
判断是不是二叉搜索树
https://www.nowcoder.com/practice/a69242b39baf45dea217815c7dedb52b
/**
* struct TreeNode {
* int val;
* struct TreeNode *left;
* struct TreeNode *right;
* TreeNode(int x) : val(x), left(nullptr), right(nullptr) {}
* };
*/
#include <climits>
class Solution {
public:
/**
* 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
*
*
* @param root TreeNode类
* @return bool布尔型
*/
bool is_Bst(TreeNode* root, int data,bool isleft) {
if (root != nullptr) {
bool tag = true;
//BST树不存在相等的两个结点
//如果左边存在,判断根是否大于左边
if (root->left) tag = root->val > root->left->val;
//如果右边存在,判断根是否小于右边
if (root->right) tag = tag && (root->val < root->right->val);
//在左分支,判断左子树的右孩子是否小于根
if(isleft&&root->right) tag=tag&&(root->right->val<data);
//在右分支,判断右子树的左孩子是否大于根
else if(!isleft&&root->left)tag=tag&&(root->left->val>data);
return tag && is_Bst(root->left,root->val,true) && is_Bst(root->right,root->val,false);
}
//空树也是BST树
return true;
}
bool isValidBST(TreeNode* root) {
// write code here
//第一次给的条件,因为根节点右孩子的值一定大于跟,所以将INT_MIN给data,右边在判断时能够正常得到执行
return is_Bst(root,INT_MIN,false);
}
};

查看3道真题和解析