求先序排列(二叉樹已知中序和後序,求先序)
阿新 • • 發佈:2019-04-26
ostream ble sta EDA 題目 sam test c++ adc
提交: 90 解決: 73
[提交][狀態][Edit] [TestData]
問題 A: [2001_p3]求先序排列
時間限制: 1 Sec 內存限制: 125 MB提交: 90 解決: 73
題目描述
給出一棵二叉樹的中序與後序排列。求出它的先序排列。(約定樹結點用不同的大寫字母表示,長度<=8)。
輸入
每個測試文件只包含一組測試數據,每組輸入包含兩行,第一行輸入一個字符串表示二叉樹的中序排列,第二行輸入一個字符串表示二叉樹的後序排列。
輸出
對於每組輸入數據,輸出二叉樹的先序排列。
樣例輸入
BADC
BDCA
樣例輸出
ABCD
提示
#include<iostream> #include<bits/stdc++.h> using namespace std; string s1,s2; void print(int l1,int r1,int l2,int r2) { //cout<<" "<<l1<<" "<<r1<<" "<<l2<<" "<<r2<<endl; /*if(r1<=l1) { cout<<s1[l1]; return; } if(r2<=l1) { cout<<s2[l1]; return; }*/ int k=-1; for(int i=l1;i<r1;i++) { if(s1[i]==s2[r2-1]) { cout<<s1[i]; k=i; break; } } //cout<<"k "<<k<<endl; if(k>l1) { //cout<<"進入左"<<endl; print(l1,k,l2,k-l1+l2); }if(r1>k+1) { //cout<<"進入右"<<endl; print(k+1,r1,k-l1+l2,r2-1); } } int main() { cin>>s1>>s2; print(0,s1.length(),0,s2.length()); return 0; }
求先序排列(二叉樹已知中序和後序,求先序)