問題 F: 二叉樹遍歷(flist)
時間限制: 1 Sec 內存限制: 128 MB提交: 11 解決: 9
[提交][狀態][討論版][命題人:quanxing][Edit] [TestData] [同步數據]
題目描述
樹和二叉樹基本上都有先序、中序、后序、按層遍歷等遍歷順序,給定中序和其它一種遍歷的序列就可以確定一棵二叉樹的結構。
假定一棵二叉樹一個結點用一個字符描述,現在給出中序和按層遍歷的字符串,求該樹的先序遍歷字符串。
輸入
兩行,每行是由字母組成的字符串(一行的每個字符都是唯一的),分別表示二叉樹的中序遍歷和按層遍歷的序列。
輸出
一行,表示二叉樹的先序序列。
樣例輸入
DBEAC
ABCDE
樣例輸出
ABDEC
提示
#include<iostream> #include<cstring> #include<string> using namespace std; //因為層序是先輸出根節點的,所以可以遞歸查找 string s1,s2; void find(int l1,int r1,int l2,int r2) { int i,j; for(i=l2;i<=r2;i++)//找層次遍歷中優先輸出根節點的位置 { int f=0; for(j=l1;j<=r1;j++) { if(s2[i]==s1[j])//輸出根節點 { cout<<s1[j]; f=1; break; } } if(f) break; } if(j>l1) find(l1,j-1,0,r2);//遍歷左子樹 if(j<r1) find(j+1,r1,0,r2);//遍歷右子樹 } int main() { cin>>s1>>s2; find(0,s1.length()-1,0,s2.length()); return 0; }