设计一个判别给定二叉树是否为二叉排序树的算法。
#include<iostream>
using namespace std;
typedef struct biTnode {
char data;
struct biTnode *lc, *rc;
} biTnode, *bitree;
bitree pre = NULL; // 前驱指针
void cr_bitree(bitree &T) {
char ch;
cin >> ch;
if (ch == '#') T = NULL;
else {
T = new biTnode;
T->data = ch;
cr_bitree(T->lc);
cr_bitree(T->rc);
}
}
void JudgeBST(bitree T, int &flag) {
// 判断二叉树T是否是二叉排序树,flag初值为1
if (T != NULL && flag) {
JudgeBST(T->lc, flag); // 中序遍历左子树
if (pre == NULL) pre = T; // 中序遍历的第一个结点不必判断
else if (pre->data < T->data) pre = T; // 前驱指针指向当前结点
else flag = 0; // 不是二叉排序树
JudgeBST(T->rc, flag); // 中序遍历右子树
}
}
int main() {
int ans = 1;
bitree T;
cout << "请输入第一个树:" << endl;
cr_bitree(T);
JudgeBST(T, ans);
if (ans)
cout << "是二叉排序树" << endl;
else
cout << "不是二叉排序树" << endl;
delete T;
return 0;
}