二叉排序树的判定
#include<iostream>
using namespace std;
typedef struct TreeNode{
char val;
TreeNode* left;
TreeNode* right;
TreeNode():val('0'),left(nullptr),right(nullptr){};
TreeNode(char x):val(x),left(nullptr),right(nullptr){};
}TreeNode,*BiTree;
BiTree PreInsertBiTree(){
char x;
cin>>x;
if(x == '#') return nullptr;
TreeNode* root = new TreeNode (x);
root->left = PreInsertBiTree();
root->right = PreInsertBiTree();
return root;
}
char flag = '#';
bool isBST(BiTree B){
if(B == nullptr) return true;
bool l = isBST(B->left);
if(flag == '#'){
flag = B->val;
}else{
if(B->val > flag) {
flag = B->val;
}else{
return false;
}
}
bool r = isBST(B->right);
return l && r;
};
bool isValidBST(BiTree root) {
return isBST(root);
}
int main(){
BiTree B;
do {
B = PreInsertBiTree();
if(B!= nullptr){
if(isValidBST(B)){
cout<<"YES"<<endl;
}else{
cout<<"NO"<<endl;
}
}
}while(B != nullptr);
return 0;
}