C/C++建树和遍历

本文介绍如何使用C/C++语言创建二叉树,并分别进行前序、中序和后序遍历。通过示例代码展示树节点的定义、插入新节点以及三种遍历方式的实现细节。
  1. /*c/c++建树和遍历*/
  2. #include <stdio.h>
  3. #include <malloc.h>
  4. typedef struct node{ 
  5. int data; 
  6. struct node *lchild,*rchild; 
  7. }*treetp,tree; 
  8. treetp create (treetp t,int c); 
  9. void print1(treetp); 
  10. void print2(treetp);
  11. void print3(treetp);
  12. int number=0;
  13. void main() 
  14. {
  15.   treetp t=0,r; 
  16.   r=create (t,0); 
  17.   printf("前序排列 :");
  18.   print1  (r); 
  19.   printf("/n中序排列 :");
  20.   print2 (r);
  21.   printf("/n后序排列 :");
  22.   print3 (r);
  23. treetp  create(treetp t,int c) 
  24. treetp p,di; 
  25. do
  26. scanf("%d",&c); 
  27. if (t==0) 
  28.  { 
  29.  t=(treetp)malloc(sizeof(tree)); 
  30.  t->lchild=t->rchild=0; 
  31.  t->data=c; 
  32.  } 
  33. else 
  34.  {   p=t; 
  35.   while(p!=0) 
  36.   { 
  37.   di=p; 
  38.   if(c<(p->data)) 
  39.   p=p->lchild; 
  40.   else 
  41.   p=p->rchild; 
  42.   } 
  43. if(c<(di->data)) 
  44. treetp NEWdi=(treetp) malloc(sizeof(tree)); 
  45. NEWdi->lchild=NEWdi->rchild=0; 
  46. NEWdi->data=c; 
  47. di->lchild=NEWdi; 
  48. else 
  49. treetp NEWdi=(treetp) malloc(sizeof(tree)); 
  50. NEWdi->lchild=NEWdi->rchild=0; 
  51. NEWdi->data=c; 
  52. di->rchild=NEWdi; 
  53.  } 
  54. ++number;
  55. }while(c!=0); 
  56. printf("叶子的数量:%d",number);
  57. return t;
  58. }   
  59. void print1(treetp  t) 
  60.    if (t!=0) 
  61.   {     
  62.    printf("%d ",t->data);
  63.    print1(t->lchild); 
  64.    print1(t->rchild); 
  65.    } 
  66. void print2(treetp  t) 
  67.    if (t!=0) 
  68.   {     
  69.    print2(t->lchild); 
  70.    printf("%d ",t->data); 
  71.    print2(t->rchild); 
  72.    } 
  73. void print3(treetp  t) 
  74.    if (t!=0) 
  75.   {     
  76.    print3(t->lchild);  
  77.    print3(t->rchild); 
  78.    printf("%d ",t->data);
  79.    } 

<script src="http://pagead2.googlesyndication.com/pagead/show_ads.js" type="text/javascript"> </script>
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值