二叉樹遍歷(已知中序和按層遍歷求先序 遞迴)
阿新 • • 發佈:2019-01-09
二叉樹遍歷(flist)
時間限制: 1000 ms 記憶體限制: 65536 KB
提交數: 8 通過數: 6
【題目描述】
樹和二叉樹基本上都有先序、中序、後序、按層遍歷等遍歷順序,給定中序和其它一種遍歷的序列就可以確定一棵二叉樹的結構。
假定一棵二叉樹一個結點用一個字元描述,現在給出中序和按層遍歷的字串,求該樹的先序遍歷字串。
【輸入】
兩行,每行是由字母組成的字串(一行的每個字元都是唯一的),分別表示二叉樹的中序遍歷和按層遍歷的序列。
【輸出】
一行,表示二叉樹的先序序列。
【輸入樣例】
DBEAC ABCDE
【輸出樣例】
ABDEC
【來源】
No
這種題一般都要先確定好根節點的位置。然後才根據先序、中序、後序的規則進行遞迴。#include<iostream> #include<cstring> using namespace std; string s1,s2; void calc(int l1,int r1,int l2,int r2) { int i,j; for(i=l2;i<=r2;i++)//找層次遍歷中優先輸出根節點的位置 { int b=0; for(j=l1;j<=r1;j++) { if(s2[i]==s1[j]) { cout<<s1[j];//輸出根節點 b=1; break; } } if(b) break; } if(j>l1) calc(l1,j-1,0,r2);//遍歷左子樹 if(j<r1) calc(j+1,r1,0,r2);//遍歷右子樹 } int main() { cin>>s1>>s2; calc(0,s1.length()-1,0,s2.length()-1); cout<<endl; return 0; }