要求可從輸入端輸入一組數據後對其進行比較後以先序遍歷、中序遍歷、後序遍歷輸出:
代碼如下:
#include <stdio.h>
#include <stdlib.h>
#define N 12
typedef struct btree
{
int data;
struct btree *left;
struct btree *right;
}BTR,*PBTR;
PBTR Bitree=NULL;
void creat_btree(int *a,int size) /*The establishment of tree*/
{
int i;
PBTR pre,pre2;
for(i=0;i<size;i++)
{
if(Bitree==NULL)
{
Bitree=(PBTR)malloc(sizeof(BTR)); //分配空間
if(Bitree==NULL) //分配空間失敗
{
printf("Malloc fail/n");
break;
}
else
{
Bitree->data=a[i]; //分配成功時,將第一個元素值給Bitree
Bitree->left=NULL; //左節點置爲空
Bitree->right=NULL;
continue; //結束本次循環
}
}
else
{
pre=Bitree; //將第一個元素給pre
}
while(1)
{
if(a[i]>pre->data)
{
if(pre->right==NULL)
{
pre2=(PBTR)malloc(sizeof(BTR));
if(pre2==NULL)
{
printf("Malloc fail/n");
break;
}
else
{
pre2->data=a[i];
pre2->left=NULL;
pre2->right=NULL;
pre->right=pre2;
break;
}
}
else
{
pre=pre->right; //如果右節點不爲空就將pre的右節點賦值給pre
}
}
else //如果新元素小於已經存在的根節點,就將元素往左邊比較
{
if(pre->left==NULL)
{
pre2=(PBTR)malloc(sizeof(BTR));
if(pre2==NULL)
{
printf("Malloc fail/n");
break;
}
else
{
pre2->data=a[i];
pre2->left=NULL;
pre2->right=NULL;
pre->left=pre2;
break;
}
}
else
{
pre=pre->left;
}
}
}
}
}
void preorder(PBTR p) //先序遍歷
{
if(p!=NULL)
{
printf("%2d,",p->data);
preorder(p->left);
preorder(p->right);
}
}
void midorder(PBTR p) //中序遍歷
{
if(p!=NULL)
{
midorder(p->left);
printf("%2d,",p->data);
midorder(p->right);
}
}
void postorder(PBTR p) //後序遍歷
{
if(p!=NULL)
{
postorder(p->left);
postorder(p->right);
printf("%2d,",p->data);
}
}
void main()
{
int i,a[N];
printf("/ninput 12 number:/n");
for(i=0;i<N;i++) //輸入元素
{
printf("/n%d,",i);
scanf("%d",&a[i]);
}
printf("/n/n");
printf("The establishment of the establishment of non-recursive tree:/n");
printf("/n/n");
creat_btree(a,N);
printf("/n/n");
printf("Pre-order traversal: ");
printf("/n/n");
preorder(Bitree);
printf("/n/n");
printf("/nIn order traversal: ");
printf("/n/n");
midorder(Bitree);
printf("/n/n");
printf("/nFollow-up to traverse: ");
printf("/n/n");
postorder(Bitree);
printf("/n");
for(; ;){} /*for循環在這裏的功能是,當我編譯運行的時候。輸入元素後按回車,編譯工具後後臺將outprintf窗口給關閉了,所以寫一個for告訴outprintf窗口等一下關閉還有操作*/
}
編譯通過!