二叉排序树的判定
描述
假设二叉树每个结点的元素均为一个单字符,根据给定的字符序列按照先序遍历的顺序递归创建该树的二叉链表,然后判断该二叉树是否为二叉排序树。
输入
多组数据,每组数据有一行。每行为一个二叉树对应的前序序列(其中‘#’表示空树)。当序列为“#”时,输入结束。
输出
每组数据输出1行,若此二叉树为二叉排序树则输出“YES”,否则输出“NO”。
输入样例 1
ba##c## ca##b## #
输出样例 1
YES NO
#include<iostream>
using namespace std;
#define Max 100
typedef struct BiNode{
char data;
struct BiNode* lchild, * rchild;
}BiNode,*BiTree;
void Create(BiTree &t,char a[],int &i) {
if (a[i] == '#'){
t=NULL;
}
else {
t = new BiNode;
t->data = a[i];
Create(t->lchild, a, ++i);
Create(t->rchild, a, ++i);
}
}
int flag;
int k;
void Judge(BiTree t) {
if (t) {
Judge(t->lchild);
if (k > t->data) {
flag = 0;
return;
}
else {
k = t->data;
}
Judge(t->rchild);
}
}
int main() {
char a[100];
while (cin >> a && a[0] != '#') {
BiTree t;
int i = -1;
Create(t, a,++i);
flag = 1;
k = 0;
Judge(t);
if (flag == 0) {
cout << "NO" << endl;
}
else {
cout << "YES" << endl;
}
}
}