SDUT 3344 数据结构实验之二叉树五:层序遍历

来源:互联网 发布:miflash 保留所有数据 编辑:程序博客网 时间:2024/03/29 17:19

http://acm.sdut.edu.cn/sdutoj/problem.php?action=showproblem&problemid=3344

数据结构实验之二叉树五:层序遍历

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

题目描述

已知一个按先序输入的字符序列,如abd,,eg,,,cf,,,(其中,表示空结点)。请建立二叉树并求二叉树的层次遍历序列。

输入

 输入数据有多行,第一行是一个整数t (t<1000),代表有t行测试数据。每行是一个长度小于50个字符的字符串。

输出

 输出二叉树的层次遍历序列。

示例输入

2abd,,eg,,,cf,,,xnl,,i,,u,,

示例输出

abcdefgxnuli

提示

 

来源

 xam

示例程序

 
  • 提交 
  • 状态 
  • 讨论
按照先序建立二叉树然后再进行层次遍历,代码如下

view plaincopyprint如果您复制代码时出现行号,请点击左边的“view plain”后再复制
  1. #include <cstdio>  
  2. #include <cstring>  
  3. #include <algorithm>  
  4. using namespace std;  
  5. char s[50+5];  
  6. int ans;  
  7. struct tree  
  8. {  
  9.     char data;  
  10.     tree *l, *r;  
  11. }*q[50+5];  
  12. tree *build()  //递归先序建立二叉树
  13. {  
  14.     char c=s[ans++];  
  15.     tree *root;  
  16.     if(c==',')  
  17.         root=NULL;  
  18.     else  
  19.     {  
  20.         root=new tree;  
  21.         root->data=c;  
  22.         root->l=build();  
  23.         root->r=build();  
  24.     }  
  25.     return root;  
  26. }  
  27. void level(tree *root)  //基于队列的层次遍历
  28. {  
  29.     if(!root) return ;  
  30.     int head=1, tail=1;  
  31.     q[tail++]=root;  
  32.     while(head<tail)  
  33.     {  
  34.         printf("%c", q[head]->data);  
  35.         if(q[head]->l)  
  36.         {  
  37.             q[tail++]=q[head]->l;  
  38.         }  
  39.         if(q[head]->r)  
  40.         {  
  41.             q[tail++]=q[head]->r;  
  42.         }  
  43.         head++;  
  44.     }  
  45. }  
  46. int main()  
  47. {  
  48.     int t;  
  49.     while(~scanf("%d", &t))  
  50.     {  
  51.         while(t--)  
  52.         {  
  53.             ans=0;  
  54.             scanf("%s", s);  
  55.             tree *root=build();  
  56.             level(root);  
  57.             printf("\n");  
  58.         }  
  59.     }  
  60.     return 0;  
  61. }  

0 0
原创粉丝点击