146
技術社區[雲棲]
九度題目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