算法
int JudgeBST(BiTree t) {
if (t == NULL) {
return 1;
}
else {
int d1, d2;
d1 = JudgeBST(t->lchild);
if (d1 == 0 || predt >= t->data) return 0;
predt = t->data;
d2 = JudgeBST(t->rchild);
return d2;
}
}
测试
#include<iostream>
using namespace std;
#define ElemType int
typedef struct BiNode {
ElemType data;
struct BiNode *lchild, *rchild;
}BiNode, *BiTree;
int BST_Insert(BiTree &t, ElemType k);
void Creat_BST(BiTree &t, ElemType str[], int n);
void Traverse(BiNode *p);
int JudgeBST(BiTree t);
int main() {
int str[] = { 53,17,9,45,23,81,65,94,88 };
BiTree t;
Creat_BST(t, str, 9);
cout << JudgeBST(t);
return 0;
}
int predt = -32767;
int JudgeBST(BiTree t) {
if (t == NULL) {
return 1;
}
else {
int d1, d2;
d1 = JudgeBST(t->lchild);
if (d1 == 0 || predt >= t->data) return 0;
predt = t->data;
d2 = JudgeBST(t->rchild);
return d2;
}
}
//二叉排序树插入新结点
int BST_Insert(BiTree &t, ElemType k) {
if (t == NULL) {
t = new BiNode;
t->data = k;
t->lchild = t->rchild = NULL;
return 1;
}
else if (k == t->data) return 0;
else if (k < t->data) return BST_Insert(t->lchild, k);
else return BST_Insert(t->rchild, k);
}
//创建排序二叉树
void Creat_BST(BiTree &t, ElemType str[], int n) {
t = NULL;
for (int i = 0; i < n; i++) {
BST_Insert(t, str[i]);
}
}
void Traverse(BiNode *p) {
if (p == NULL) {
return;
}
else {
Traverse(p->lchild);
cout << p->data <<endl;
Traverse(p->rchild);
}
return;
}