閱讀146 返回首頁    go 技術社區[雲棲]


九度題目1184:二叉樹遍曆

題目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;
}


 

最後更新:2017-04-03 12:56:20

  上一篇:go 九度題目1399:名偵探柯南
  下一篇:go poj 1552 Doubles【goto語句】