程序员面试金典

时间:2022-12-29 00:37:47

程序员面试金典--检查是否为BST

题目描述

请实现一个函数,检查一棵二叉树是否为二叉查找树。

给定树的根结点指针TreeNode* root,请返回一个bool,代表该树是否为二叉查找树。

 

/*
struct TreeNode {
int val;
struct TreeNode *left;
struct TreeNode *right;
TreeNode(int x) :
val(x), left(NULL), right(NULL) {
}
};*/

class Checker {
public:
bool flag;

int Get(TreeNode* rt){
if(rt->left== NULL && rt->right==NULL){
return rt->val;
}
int ans = rt->val;
if(rt->left){
int lr = Get(rt->left);
if(lr > rt->val){
flag = false;
}
ans = max(ans, lr);
}

if(rt->right){
int rg = Get(rt->right);
if(rt->val > rg){
flag = false;
}
ans = max(ans, rg);
}
return ans;
}

bool checkBST(TreeNode* root) {
// write code here
if(root == NULL){
return true;
}
flag = true;
Get(root);
return flag;

}
};