#include <stdio.h>
#include <stdlib.h>
#include <time.h>
#include <assert.h>
struct data{
int integer;
int level;
struct data *rlink;
struct data *llink;
struct data *connect;
};
struct QUEUE{
struct data *rear,*front;
};
void insertion(void);
void access(int);
void preorder(struct data*); //preorder traversal
void inorder(struct data*); //inorder traversal
void postorder(struct data*); //postorder traversal
void breadth_first(struct data*); //breadth-first traversal
struct data *root, *ptr;
int main()
{
int i=0;
int a;
FILE *fp;
fp
=fopen("data.txt","w"); for(i=0;i<10;i++)
insertion();
{
printf("\n----HELLO!THIS IS PROJECT4!----\n"); printf("(1)preorder\n(2)inorder\n(3)postorder\n(4)breadth-first\n(5)exit\n"); printf("please select one operation:");
switch(a)
{
case 1:
preorder(root);
break;
case 2:
inorder(root);
break;
case 3:
postorder(root);
break;
case 4:
breadth_first(root);
break;
case 5:
break;
}
}
return 0;
}
void insertion(void)
{
FILE *fptr;
int integer;
printf("\nFile loading...\n"); if((fptr
= fopen("data.txt","r")) == NULL
) {
return;
}
while(fscanf(fptr
,"%d\n",&integer
)!=EOF
) access(integer);
}
void access(int integer)
{
struct data *node, *prev;
ptr
= (struct data
*)malloc(sizeof(struct data
)); ptr->integer=integer;
ptr->llink = ptr->rlink = NULL;
if(root == NULL)
root = ptr;
else
{
node = root;
while(node!=NULL)
{
prev = node;
if((ptr->integer) < (node->integer))
node = node->llink;
else
node = node->rlink;
}
if((ptr->integer) < (prev->integer))
prev->llink = ptr;
else
prev->rlink = ptr;
}
}
void preorder(struct data *node)
{
if(node!=NULL)
{
preorder(node->llink);
preorder(node->rlink);
}
}
void inorder(struct data *node)
{
if(node!=NULL)
{
inorder(node->llink);
inorder(node->rlink);
}
}
void postorder(struct data *node)
{
if(node!=NULL)
{
postorder(node->llink);
postorder(node->rlink);
}
}
void breadth_first(struct data *node)
{
struct QUEUE *p;
p
= (struct QUEUE
*)malloc(sizeof(struct QUEUE
)); int i;
for(i=0;;i++)
{
if(i==0)
{
p->front=root;
root->level=i+1;
p->rear=root;
}
else
{
while(p->front->level==i)
{
if(p->front->llink!=NULL)
{
p->rear->connect = p->front->llink;
p->rear = p->front->llink;
p->rear->level = i+1;
printf("%d.",p
->rear
->integer
); }
if(p->front->rlink!=NULL)
{
p->rear->connect = p->front->rlink;
p->rear = p->front->rlink;
p->rear->level=i+1;
printf("%d.",p
->rear
->integer
); }
if(p->front->connect!=NULL)
{
p->front=p->front->connect;
}
else
{
break;
}
}
}
if((p->front->llink==NULL) && (p->front->rlink==NULL) && (p->front->connect==NULL))
{
break;
}
}
}
I2luY2x1ZGUgPHN0ZGlvLmg+CiNpbmNsdWRlIDxzdGRsaWIuaD4KI2luY2x1ZGUgPHRpbWUuaD4KI2luY2x1ZGUgPGFzc2VydC5oPgogCnN0cnVjdCBkYXRhewogIGludCBpbnRlZ2VyOyAgICAgICAgICAgICAgCiAgaW50IGxldmVsOyAgICAgICAgICAgICAgICAKICBzdHJ1Y3QgZGF0YSAqcmxpbms7ICAgICAgIAogIHN0cnVjdCBkYXRhICpsbGluazsKICBzdHJ1Y3QgZGF0YSAqY29ubmVjdDsgICAgIAp9OwogCnN0cnVjdCBRVUVVRXsKICAgIHN0cnVjdCBkYXRhICpyZWFyLCpmcm9udDsKfTsKIAp2b2lkIGluc2VydGlvbih2b2lkKTsgICAgIAp2b2lkIGFjY2VzcyhpbnQpOyAgICAgIAp2b2lkIHByZW9yZGVyKHN0cnVjdCBkYXRhKik7ICAgICAgICAgICAgLy9wcmVvcmRlciB0cmF2ZXJzYWwKdm9pZCBpbm9yZGVyKHN0cnVjdCBkYXRhKik7ICAgICAgICAgICAgIC8vaW5vcmRlciB0cmF2ZXJzYWwKdm9pZCBwb3N0b3JkZXIoc3RydWN0IGRhdGEqKTsgICAgICAgICAgIC8vcG9zdG9yZGVyIHRyYXZlcnNhbAp2b2lkIGJyZWFkdGhfZmlyc3Qoc3RydWN0IGRhdGEqKTsgICAgICAgLy9icmVhZHRoLWZpcnN0IHRyYXZlcnNhbAogCnN0cnVjdCBkYXRhICpyb290LCAqcHRyOwogCiAKaW50IG1haW4oKQp7CiAgICBpbnQgaT0wOwogICAgaW50IGE7CiAgICBpbnQgZXhpdD0wOwogICAgc3JhbmQodGltZShOVUxMKSk7CiAKIAogICAgRklMRSAqZnA7ICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgZnA9Zm9wZW4oImRhdGEudHh0IiwidyIpOwogICAgYXNzZXJ0KCBmcCAhPSBOVUxMICk7CiAgICBmb3IoaT0wO2k8MTA7aSsrKQogICAgZnByaW50ZihmcCwiJWRcbiIscmFuZCgpJTEwMCsxKTsKICAgIGZjbG9zZShmcCk7CiAKICAgIGluc2VydGlvbigpOwogICAgd2hpbGUoZXhpdCE9NSkKICAgIHsKICAgICAgICBwcmludGYoIlxuLS0tLUhFTExPIVRISVMgSVMgUFJPSkVDVDQhLS0tLVxuIik7CiAgICAgICAgcHJpbnRmKCIoMSlwcmVvcmRlclxuKDIpaW5vcmRlclxuKDMpcG9zdG9yZGVyXG4oNClicmVhZHRoLWZpcnN0XG4oNSlleGl0XG4iKTsKICAgICAgICBwcmludGYoInBsZWFzZSBzZWxlY3Qgb25lIG9wZXJhdGlvbjoiKTsKICAgICAgICBzY2FuZigiJWQiLCZhKTsKIAogICAgICAgc3dpdGNoKGEpCiAgICAgICB7CiAgICAgICAgY2FzZSAxOgogICAgICAgICAgICAgIHByZW9yZGVyKHJvb3QpOwogICAgICAgICAgICAgIGJyZWFrOwogCiAgICAgICAgY2FzZSAyOgogICAgICAgICAgICAgIGlub3JkZXIocm9vdCk7CiAgICAgICAgICAgICAgYnJlYWs7CiAKICAgICAgICBjYXNlIDM6CiAgICAgICAgICAgICAgcG9zdG9yZGVyKHJvb3QpOwogICAgICAgICAgICAgIGJyZWFrOwogCiAgICAgICAgY2FzZSA0OgogICAgICAgICAgICAgIGJyZWFkdGhfZmlyc3Qocm9vdCk7CiAgICAgICAgICAgICAgYnJlYWs7CiAKICAgICAgICBjYXNlIDU6CiAgICAgICAgICAgIHByaW50ZigiZXhpdCFcbiIpOwogICAgICAgICAgICBleGl0ID0gNTsKICAgICAgICAgICAgYnJlYWs7CiAgICAgICB9CiAgICAgIH0KICAgIHJldHVybiAwOwp9CiAKdm9pZCBpbnNlcnRpb24odm9pZCkKewogICAgRklMRSAqZnB0cjsKICAgIGludCBpbnRlZ2VyOwogICAgcHJpbnRmKCJcbkZpbGUgbG9hZGluZy4uLlxuIik7CiAgICBpZigoZnB0ciA9IGZvcGVuKCJkYXRhLnR4dCIsInIiKSkgPT0gTlVMTCkKICAgIHsKICAgICAgICAgcHJpbnRmKCJmYWlsZWQuLi4uLi4iKTsKICAgICAgICAgcmV0dXJuOwogICAgfQogICAgd2hpbGUoZnNjYW5mKGZwdHIsIiVkXG4iLCZpbnRlZ2VyKSE9RU9GKQogICAgIGFjY2VzcyhpbnRlZ2VyKTsKICAgICBmY2xvc2UoZnB0cik7CiAgICAgcHJpbnRmKCJsb2FkaW5nIHN1Y2Nlc3NcbiIpOwp9CiAKdm9pZCBhY2Nlc3MoaW50IGludGVnZXIpCnsKICAgIHN0cnVjdCBkYXRhICpub2RlLCAqcHJldjsKICAgIHB0ciA9IChzdHJ1Y3QgZGF0YSAqKW1hbGxvYyhzaXplb2Yoc3RydWN0IGRhdGEpKTsKICAgIHB0ci0+aW50ZWdlcj1pbnRlZ2VyOwogICAgcHRyLT5sbGluayA9IHB0ci0+cmxpbmsgPSBOVUxMOwogICAgaWYocm9vdCA9PSBOVUxMKSAgICAgCiAgICAgICByb290ID0gcHRyOwogICAgZWxzZSAgICAgICAgICAgICAgCiAgICB7CiAgICAgICAgbm9kZSA9IHJvb3Q7CiAgICAgICAgd2hpbGUobm9kZSE9TlVMTCkKICAgICAgICB7CiAgICAgICAgICAgIHByZXYgPSBub2RlOwogICAgICAgICAgICBpZigocHRyLT5pbnRlZ2VyKSA8IChub2RlLT5pbnRlZ2VyKSkgICAgIAogICAgICAgICAgICAgICAgbm9kZSA9IG5vZGUtPmxsaW5rOwogICAgICAgICAgICBlbHNlCiAgICAgICAgICAgICAgICBub2RlID0gbm9kZS0+cmxpbms7ICAgICAgICAgICAgICAgICAgCiAgICAgICAgfQogICAgICAgIGlmKChwdHItPmludGVnZXIpIDwgKHByZXYtPmludGVnZXIpKQogICAgICAgICAgICAgICAgcHJldi0+bGxpbmsgPSBwdHI7CiAgICAgICAgZWxzZQogICAgICAgICAgICAgICAgcHJldi0+cmxpbmsgPSBwdHI7CiAgICAgfQp9CiAKdm9pZCBwcmVvcmRlcihzdHJ1Y3QgZGF0YSAqbm9kZSkKewogICAgaWYobm9kZSE9TlVMTCkKICAgIHsKICAgICAgcHJpbnRmKCIlZC4iLG5vZGUtPmludGVnZXIpOwogICAgICBwcmVvcmRlcihub2RlLT5sbGluayk7CiAgICAgIHByZW9yZGVyKG5vZGUtPnJsaW5rKTsKICAgIH0KfQogCnZvaWQgaW5vcmRlcihzdHJ1Y3QgZGF0YSAqbm9kZSkKewogICAgaWYobm9kZSE9TlVMTCkKICAgIHsKICAgICAgICBpbm9yZGVyKG5vZGUtPmxsaW5rKTsKICAgICAgICBwcmludGYoIiVkLiIsbm9kZS0+aW50ZWdlcik7CiAgICAgICAgaW5vcmRlcihub2RlLT5ybGluayk7CiAgICB9Cn0KIAp2b2lkIHBvc3RvcmRlcihzdHJ1Y3QgZGF0YSAqbm9kZSkKewogICAgaWYobm9kZSE9TlVMTCkKICAgIHsKICAgICAgICBwb3N0b3JkZXIobm9kZS0+bGxpbmspOwogICAgICAgIHBvc3RvcmRlcihub2RlLT5ybGluayk7CiAgICAgICAgcHJpbnRmKCIlZC4iLG5vZGUtPmludGVnZXIpOwogICAgfQogCn0KIAp2b2lkIGJyZWFkdGhfZmlyc3Qoc3RydWN0IGRhdGEgKm5vZGUpCnsKICAgIHN0cnVjdCBRVUVVRSAqcDsKICAgIHAgPSAoc3RydWN0IFFVRVVFICopbWFsbG9jKHNpemVvZihzdHJ1Y3QgUVVFVUUpKTsKICAgIGludCBpOwogCiAgICAgZm9yKGk9MDs7aSsrKQogICAgIHsKICAgICAgaWYoaT09MCkKICAgICAgewogICAgICAgICAgICBwLT5mcm9udD1yb290OyAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgcm9vdC0+bGV2ZWw9aSsxOyAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgIHByaW50ZigiJWQuIixyb290LT5pbnRlZ2VyKTsKICAgICAgICAgICAgcC0+cmVhcj1yb290OwogICAgICB9CiAgICAgIGVsc2UKICAgICAgewogICAgICAgd2hpbGUocC0+ZnJvbnQtPmxldmVsPT1pKQogICAgICAgewogICAgICAgICAgICBpZihwLT5mcm9udC0+bGxpbmshPU5VTEwpICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgcC0+cmVhci0+Y29ubmVjdCA9IHAtPmZyb250LT5sbGluazsKICAgICAgICAgICAgICAgICAgICBwLT5yZWFyID0gcC0+ZnJvbnQtPmxsaW5rOwogICAgICAgICAgICAgICAgICAgIHAtPnJlYXItPmxldmVsID0gaSsxOwogICAgICAgICAgICAgICAgICAgIHByaW50ZigiJWQuIixwLT5yZWFyLT5pbnRlZ2VyKTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgaWYocC0+ZnJvbnQtPnJsaW5rIT1OVUxMKSAgICAgICAgICAgIAogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgIHAtPnJlYXItPmNvbm5lY3QgPSBwLT5mcm9udC0+cmxpbms7CiAgICAgICAgICAgICAgICAgICAgcC0+cmVhciA9IHAtPmZyb250LT5ybGluazsKICAgICAgICAgICAgICAgICAgICBwLT5yZWFyLT5sZXZlbD1pKzE7CiAgICAgICAgICAgICAgICAgICAgcHJpbnRmKCIlZC4iLHAtPnJlYXItPmludGVnZXIpOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICBpZihwLT5mcm9udC0+Y29ubmVjdCE9TlVMTCkKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICAgcC0+ZnJvbnQ9cC0+ZnJvbnQtPmNvbm5lY3Q7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIGVsc2UKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgIH0KICAgICAgIH0KICAgICAgfQogCiAgICAgIGlmKChwLT5mcm9udC0+bGxpbms9PU5VTEwpICYmIChwLT5mcm9udC0+cmxpbms9PU5VTEwpICYmIChwLT5mcm9udC0+Y29ubmVjdD09TlVMTCkpICAKICAgICAgewogICAgICAgIGJyZWFrOwogICAgICB9CiAKICAgICB9Cn0KIA==