九度题目1184:二叉树遍历

来源:互联网 发布:vb中string是什么意思 编辑:程序博客网 时间:2024/05/15 13:01

题目1184:二叉树遍历

时间限制:1 秒
内存限制:32 兆
特殊判题:否
提交:2844
解决:1139
题目描述:
编一个程序,读入用户输入的一串先序遍历字符串,根据此字符串建立一个二叉树(以指针方式存储)。
例如如下的先序遍历字符串:
ABC##DE#G##F###
其中“#”表示的是空格,空格字符代表空树。建立起此二叉树以后,再对二叉树进行中序遍历,输出遍历结果。


输入:
输入包括1行字符串,长度不超过100。

输出:
可能有多组测试数据,对于每组数据,
输出将输入字符串建立二叉树后中序遍历的序列,每个字符后面都有一个空格。
每个输出结果占一行。

样例输入:
abc##de#g##f###
样例输出:
c b e g d f a

来源:
2002年华中科技大学计算机研究生机试真题

 

AC代码:

#include<stdio.h>#include<string.h>char a[150];struct node//二叉树结构体{   int L,R;   char data;}Tree[150];int n,start;void CreatTree(int n,int len)//构建一颗二叉树{     if(start==len)     return;          if(a[start]=='#')     {        Tree[n].data=' ';        Tree[n].L=-1;        Tree[n].R=-1;        start++;        return;     }     else     {         Tree[n].data=a[start];         start++;         Tree[n].L=n*2;         Tree[n].R=n*2+1;         CreatTree(n*2,len);         CreatTree(n*2+1,len);           }}void MidDisplay(int x)//二叉树先序遍历{     if(Tree[x].L!=-1)     MidDisplay(Tree[x].L);     if(Tree[x].data!=' ')     printf("%c ",Tree[x].data);     if(Tree[x].R!=-1)     MidDisplay(Tree[x].R);  }int main(){    int i,j,len;    while(scanf("%s",a)!=EOF)    {       len=strlen(a);       start=0;       n=1;       CreatTree(n,len);       MidDisplay(1);       puts("");     }    return 0;}


 

0 0
原创粉丝点击