数据结构实验之二叉树的建立与遍历

数据结构实验之二叉树的建立与遍历

Time Limit: 1000ms   Memory limit: 65536K  有疑问?点这里^_^

题目描述

       已知一个按先序序列输入的字符序列,如abc,,de,g,,f,,,(其中逗号表示空节点)。请建立二叉树并按中序和后序方式遍历二叉树,最后求出叶子节点个数和二叉树深度。

输入

  输入一个长度小于50个字符的字符串。

输出

输出共有4行:
第1行输出中序遍历序列;
第2行输出后序遍历序列;
第3行输出叶子节点个数;
第4行输出二叉树深度。

示例输入

abc,,de,g,,f,,,

示例输出

cbegdfacgefdba35

提示

 

来源

 ma6174

示例程序

  1. #include<stdio.h>  
  2. #include<string.h>  
  3.   
  4. struct node  
  5. {  
  6.     char data;  
  7.     struct node *l, *r;  
  8. };  
  9.   
  10. struct node *build(struct node *t)  
  11. {  
  12.     char x;  
  13.     scanf("%c", &x);  
  14.     if(x!=',')  
  15.     {  
  16.         t=new node;  
  17.         t->data=x;  
  18.         t->l=build(t->l);  
  19.         t->r=build(t->r);  
  20.     }  
  21.     else  
  22.         t=NULL;  
  23.     return t;  
  24. };  
  25.   
  26. void mid(struct node *t)  
  27. {  
  28.     if(t!=NULL)  
  29.     {  
  30.         mid(t->l);  
  31.         printf("%c", t->data);  
  32.         mid(t->r);  
  33.     }  
  34. }  
  35.   
  36. void last(struct node *t)  
  37. {  
  38.     if(t!=NULL)  
  39.     {  
  40.         last(t->l);  
  41.         last(t->r);  
  42.         printf("%c", t->data);  
  43.     }  
  44. }  
  45.   
  46. int ans=0;  
  47.   
  48. void leaf(struct node *p)  
  49. {  
  50.     if(p)  
  51.     {  
  52.         if(p->l==NULL && p->r==NULL)  
  53.         {  
  54.             ans++;  
  55.         }  
  56.         leaf(p->l);  
  57.         leaf(p->r);  
  58.     }  
  59. }  
  60.   
  61. int dptree(struct node *p)  
  62. {  
  63.     if(!p)  
  64.         return 0;  
  65.     else if(p)  
  66.     {  
  67.         int dl=dptree(p->l);  
  68.         int dr=dptree(p->r);  
  69.         return dl>dr ? dl+1 : dr+1;  
  70.     }  
  71.     return 0;  
  72. }  
  73.   
  74. int main()  
  75. {  
  76.     int h;  
  77.     struct node *tree=NULL;  
  78.     tree=build(tree);  
  79.     mid(tree);  
  80.     printf("\n");  
  81.     last(tree);  
  82.     printf("\n");  
  83.     leaf(tree);  
  84.     printf("%d\n",ans);  
  85.     h=dptree(tree);  
  86.     printf("%d\n", h);  
  87.     return 0;  
  88. }  
  89.    

 

 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值