二叉の木の遍歴(再帰)
1782 ワード
1058:二叉の木は時間制限を巡回します. 1セット メモリ制限: 128 MB
送信: 18 解決: 8
[提出][状態][検討版]
テーマの説明
二叉の木Tについては、先の順序で遍歴し、中の順序で遍歴し、後の順序で三つのエルゴード方式を経ることができる.ここでは、二叉樹の最初の順序を与えることを要求します.シーケンスを巡回し、その広さを優先的に巡回します.
入力
第一の行為は整数t(0)です.
出力
各テストケースの個々の行のために、優先的にシーケンスを巡回出力します.
サンプル入力
本題は主に二叉樹の遍歴に対する理解をテストします.先の順序と中の順序によって二叉樹を作成してから、二叉樹に対して階層的な遍歴を行う必要があります.
ACソース:
送信: 18 解決: 8
[提出][状態][検討版]
テーマの説明
二叉の木Tについては、先の順序で遍歴し、中の順序で遍歴し、後の順序で三つのエルゴード方式を経ることができる.ここでは、二叉樹の最初の順序を与えることを要求します.シーケンスを巡回し、その広さを優先的に巡回します.
入力
第一の行為は整数t(0)です.
出力
各テストケースの個々の行のために、優先的にシーケンスを巡回出力します.
サンプル入力
2DBACEGF ABCDEFGBCAD CBAD
サンプル出力DBEACGFBCAD
ヒント本題は主に二叉樹の遍歴に対する理解をテストします.先の順序と中の順序によって二叉樹を作成してから、二叉樹に対して階層的な遍歴を行う必要があります.
ACソース:
#include
#include
#include
#include
#include
using namespace std;
struct node
{
char value;
node* lft;
node* rgt;
node(char v):value(v),lft(0),rgt(0){}
};
node* build_tree(vector x,vector y)
{
if(x.empty()&&y.empty())
return nullptr;
node* root=new node(x.front());
vector A1,A2,B1,B2;
int cnt=0;
while(y[cnt]!=x.front())
cnt++;
for(int i=1;i<=cnt;++i)
A1.push_back(x[i]);
for(int i=0;ilft=build_tree(A1,A2);
root->rgt=build_tree(B1,B2);
return root;
}
void bfs(node* root)
{
queue que;
que.push(root);
while(!que.empty())
{
auto nd=que.front();que.pop();
cout<value;
if(nd->lft)
que.push(nd->lft);
if(nd->rgt)
que.push(nd->rgt);
}
}
int T;
int main()
{
cin>>T;
while(T--)
{
vector x,y;
char s1[30],s2[30];
scanf("%s %s",s1,s2);
for(int i=0;s1[i];i++)
x.push_back(s1[i]);
for(int i=0;s2[i];i++)
y.push_back(s2[i]);
node* root=build_tree(x,y);
bfs(root);
cout<