用c实现二叉树

来源:互联网 发布:笔记本找不到wifi网络 编辑:程序博客网 时间:2024/05/02 18:11

转自:http://blog.csdn.net/huangsir2011/article/details/8108522

 

[cpp] view plaincopyprint?
  1. 用c实现如下的二叉树  
[cpp] view plaincopyprint?
  1. <IMG alt="" src="http://img.my.csdn.net/uploads/201210/24/1351079750_7455.png">  
[cpp] view plaincopyprint?
  1. #include "stdio.h"  
  2. #include "malloc.h"  
  3. struct btree  
  4. {  
  5.     char data;  
  6.     struct btree *lp;  
  7.     struct btree *rp;  
  8. };  
  9. struct btree * init();  
  10. void pretraverse(struct btree *);  
  11. void intraverse(struct btree *);  
  12. void postraverse(struct btree *);  
  13. int main()  
  14. {  
  15.     struct btree * p=init();  
  16.     printf("前序遍历的结果为:\n");  
  17.     pretraverse(p);  
  18.     printf("中序遍历的结果为:\n");  
  19.     intraverse(p);  
  20.     printf("后序遍历的结果为:\n");  
  21.     postraverse(p);  
  22.     return 0;  
  23. }  
  24. struct btree * init()  
  25. {  
  26.     struct btree *a=(struct btree *)malloc(sizeof(struct btree));  
  27.     struct btree *b=(struct btree *)malloc(sizeof(struct btree));  
  28.     struct btree *c=(struct btree *)malloc(sizeof(struct btree));  
  29.     struct btree *d=(struct btree *)malloc(sizeof(struct btree));  
  30.     struct btree *e=(struct btree *)malloc(sizeof(struct btree));  
  31.     a->data='a';  
  32.     b->data='b';  
  33.     c->data='c';  
  34.     d->data='d';  
  35.     e->data='e';  
  36.     a->lp=b;  
  37.     b->lp=NULL;  
  38.     b->rp=NULL;  
  39.     a->rp=c;  
  40.     c->lp=d;  
  41.     d->lp=NULL;  
  42.     d->rp=NULL;  
  43.     c->rp=e;  
  44.     e->lp=NULL;  
  45.     e->rp=NULL;  
  46.     return a;  
  47. }  
  48. void pretraverse(struct btree *p)  
  49. {  
  50.     printf("%c\t",p->data);  
  51.     if(NULL!=p->lp)  
  52.     {  
  53.         pretraverse(p->lp);  
  54.     }  
  55.     if(NULL!=p->rp)  
  56.     {  
  57.         pretraverse(p->rp);  
  58.     }  
  59. }  
  60. void intraverse(struct btree *p)  
  61. {  
  62.     if(NULL!=p->lp)  
  63.     {  
  64.         intraverse(p->lp);  
  65.     }  
  66.     printf("%c\t",p->data);  
  67.     if(NULL!=p->rp)  
  68.     {  
  69.         intraverse(p->rp);  
  70.     }  
  71. }  
  72. void postraverse(struct btree *p)  
  73. {  
  74.     if(NULL!=p->lp)  
  75.     {  
  76.         postraverse(p->lp);  
  77.     }  
  78.     if(NULL!=p->rp)  
  79.     {  
  80.         postraverse(p->rp);  
  81.     }  
  82.     printf("%c\t",p->data);  
  83. }