数据结构–用递归的方法判断一个树是否是二叉排序树
【代码】:
#include<iostream>
#include<malloc.h>
#define OVERFLOW -2
using namespace std;
typedef struct BiTNode
{
int data;
int number;
struct BiTNode *parent,* lChild, * rChild;
} BiTNode,*BiTree;
int number = 0;
int yor = 0;
int maxData;
int isBST = 1;
int yesOrNo[] = { 1,0,1,0,0,1,1,1,0,0,1,0,0,1,0,0 };
//int numData[] = { 12,5,11,67,55,45,57,72 };
int numData[] = { 12,10,11,67,55,51,77,82 };
BiTree treeParent = NULL;
int OperationBiTree(BiTree &BT)
{
BT = (BiTree)malloc(sizeof(BiTNode));
if (!BT)
{
cout << "空间分配失败" << endl;
exit(OVERFLOW);
}
BT->number = number;
number++;
BT->data = numData[BT->number];
BT->lChild = NULL;
BT->rChild = NULL;
BT->parent = treeParent;
return 1;
}
void PreOrderCreatBiTree(BiTree &BT)
{
OperationBiTree(BT);
treeParent = BT;
if (yesOrNo[yor++])
PreOrderCreatBiTree(BT->lChild);
treeParent = BT;
if (yesOrNo[yor++])
PreOrderCreatBiTree(BT->rChild);
}
void VisitBiTree(BiTree BT)
{
cout << "当前结点的编号为:" << BT->number<<", 数据为:" << BT->data << ",\n";
}
void InOrderBiTree(BiTree BT)
{
if (BT)
{
InOrderBiTree(BT->lChild);
VisitBiTree(BT);
if (maxData < BT->data)
{
maxData = BT->data;
}
else
isBST = 0;
InOrderBiTree(BT->rChild);
}
}
int main()
{
BiTree BT;
PreOrderCreatBiTree(BT);
BiTree p = BT;
while (p&&p->lChild)
{
p = p->lChild;
}
maxData = p->data - 1;
cout << "\n******【中序遍历二叉树】******\n";
InOrderBiTree(BT);
if (isBST)
cout << "这个二叉树是二叉排序树.\n";
else
cout << "这个二叉树不是二叉排序树.\n";
}
【结果】