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

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

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 <stdlib.h>     
  3. typedef int ElemType;    
  4. typedef int Status;     
  5. typedef struct Node  
  6. {    
  7.     ElemType data;    
  8.     struct Node *lchild, *rchild;    
  9. }Node, *Tree;    
  10.     
  11. Status create(Tree *p)  
  12. {  
  13.     char ch = getchar();    
  14.     if(ch == ',') (*p)=NULL;    
  15.     else  
  16.     {    
  17.           
  18.         (*p) = (Tree)malloc(sizeof(Node));    
  19.         if(!(*p)) return 0;    
  20.         (*p)->data = ch;    
  21.         create(&(*p)->lchild);    
  22.         create(&(*p)->rchild);    
  23.     }    
  24.     return 1;    
  25. }    
  26.     
  27. void preoder1(Tree p)  
  28. {    
  29.     if(p)  
  30.     {    
  31.         preoder1(p->lchild);    
  32.         putchar(p->data);    
  33.         preoder1(p->rchild);    
  34.     }    
  35. }    
  36.     
  37. void preoder2(Tree p)  
  38. {    
  39.     if(p)  
  40.     {    
  41.         preoder2(p->lchild);    
  42.         preoder2(p->rchild);    
  43.         putchar(p->data);    
  44.     }    
  45. }    
  46.     
  47. int cnt_depth(Tree p)  
  48. {    
  49.     if(!p) return 0;    
  50.     int a, b;    
  51.     a = cnt_depth(p->lchild);    
  52.     b = cnt_depth(p->rchild);    
  53.     if(a>b) return a+1;    
  54.     else return b+1;    
  55. }    
  56.     
  57. int cnt_leaf(Tree p)  
  58. {    
  59.     if(!p->lchild && !p->rchild) return 1;    
  60.     else  
  61.     {    
  62.         if(!p->lchild) return cnt_leaf(p->rchild);    
  63.         if(!p->rchild) return cnt_leaf(p->lchild);    
  64.         else return cnt_leaf(p->lchild)+cnt_leaf(p->rchild);    
  65.     }    
  66. }    
  67.     
  68. int main()  
  69. {    
  70.     Tree p;    
  71.     create(&p);    
  72.     preoder1(p);    
  73.     putchar('\n');    
  74.     preoder2(p);    
  75.     putchar('\n');    
  76.     printf("%d\n", cnt_leaf(p));    
  77.     printf("%d\n", cnt_depth(p));    
  78.     
  79.     return 0;    
  80. }    
  81.   

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

叶孤心丶

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值