此題為西電數(shù)據(jù)結(jié)構(gòu)課程上機題
//判斷二叉排序樹函數(shù)
int inorder(bitree *p)
{
if(p!=NULL)
{
if(!inorder(p->lchild))return 0;
if(flag)flag=0;
else if(p->key<last)return 0; //{puts("no");exit(0);}此時不用热凹!inorder判斷脐恩,但是會直接退出程序
last=p->key;
if(!inorder(p->rchild))return 0;
}
return 1;
}
全部代碼:
//判斷二叉排序樹的程序代碼
#include<stdio.h>
#include<stdlib.h>
#include<malloc.h>
//二叉鏈表的結(jié)構(gòu)類型定義
const int maxsize=1024;
typedef int keytype;
typedef struct node
{
keytype key;
struct node *lchild,*rchild;
}bitree;
bitree*creattree();
void preorder(bitree*);
int inorder(bitree*);
keytype last;
int flag=1;
int main()
{
bitree*pb;
pb=creattree();
preorder(pb);
printf("\n");
if(inorder(pb))printf("是二叉排序樹芍秆!\n");
else printf("no");
}
//二叉樹的建立
bitree*creattree()
{
keytype x;
bitree*Q[maxsize];
int front,rear;
bitree*root,*s;
root=NULL;
front=1;rear=0;
printf("按層次輸入二叉排序樹的整型結(jié)點數(shù)據(jù),0表示虛結(jié)點,-1表示結(jié)束:\n");
scanf("%d",&x);//輸入0表示虛結(jié)點,-1表示結(jié)束
while(x!=-1)
{
s=NULL;
if(x!=0)
{
s=(bitree*)malloc(sizeof(bitree));
s->key=x;
s->lchild=NULL;
s->rchild=NULL;
}
rear++;
Q[rear]=s;
if(rear==1)root=s;
else
{
if(s&&Q[front])
if(rear%2==0)Q[front]->lchild=s;
else Q[front]->rchild=s;
if(rear%2==1)front++;
}
scanf("%d",&x);;
}
return root;
}
//二叉樹的輸出
void preorder(bitree*p)
{
if(p!=NULL)
{
printf("%d",p->key);
if(p->lchild!=NULL||p->rchild!=NULL)
{
printf("(");
preorder(p->lchild);
if(p->rchild!=NULL) printf(",");
preorder(p->rchild);
printf(")");
}
}
}
//添加判斷二叉排序樹算法
int inorder(bitree *p)
{
if(p!=NULL)
{
if(!inorder(p->lchild))return 0;
if(flag)flag=0;
else if(p->key<last)return 0; //{puts("no");exit(0);}此時不用!inorder判斷祷愉,但是會直接退出程序
last=p->key;
if(!inorder(p->rchild))return 0;
}
return 1;
}
最后編輯于 :
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者