1364:二叉樹遍歷(flist)
阿新 • • 發佈:2019-01-01
【題目描述】
樹和二叉樹基本上都有先序、中序、後序、按層遍歷等遍歷順序,給定中序和其它一種遍歷的序列就可以確定一棵二叉樹的結構。
假定一棵二叉樹一個結點用一個字元描述,現在給出中序和按層遍歷的字串,求該樹的先序遍歷字串。
【輸入】
兩行,每行是由字母組成的字串(一行的每個字元都是唯一的),分別表示二叉樹的中序遍歷和按層遍歷的序列。
【輸出】
一行,表示二叉樹的先序序列。
【輸入樣例】
DBEAC ABCDE
【輸出樣例】
ABDEC
知道中序和層序,因為層序是先輸出根節點的,所以可以遞迴查詢,知道中序和另一個都是遞迴往下查詢,都是依靠根來遞迴實現的,其實瞭解了原理並不難
#include<bits/stdc++.h> using namespace std; string s1,s2; void f(int l1,int r1,int l2,int r2) { int i,j; for(i=l2;i<=r2;i++){ int t=0; for(j=l1;j<=r1;j++){ if(s2[i]==s1[j]){ cout<<s1[j]; t=1; break; } } if(t) break; } if(j>l1) f(l1,j-1,0,r2); if(j<r1) f(j+1,r1,0,r2); } int main() { ios::sync_with_stdio(false); cin>>s1>>s2; f(0,s1.size()-1,0,s2.size()-1); return 0; }