题目大意:根据前序和中序重建二叉树,并按bfs输出
解体思路:关键注意重建二叉树时递归判断结束条件。bfs无难度。
// 1935. Rebuild the 2-tree
#include <iostream>
#include <string>
#include <queue>
using namespace std;
string pre,mid;
int len,pos;
struct Node{
char item;
Node *left, *right;
Node( char ch ){
left = right = NULL;
item = ch;
}
};
void build( Node *&root, int begin, int end ){
if( begin > end || pos >= pre.length() ) return;
root = new Node(pre[pos]);
int m = mid.find(pre[pos++]);
build( root->left, begin, m-1 );
build( root->right, m+1, end);
}
int main(){
int m;
cin >> m;
while( m-- ){
cin >> pre >> mid;
len = pre.length();
pos = 0;
Node* root = new Node(pre[0]);
build( root, 0, len-1 );
// bfs
queue<Node*> q;
q.push(root);
while( !q.empty() ){
Node *curr = q.front();
q.pop();
cout << curr->item;
if( curr->left ) q.push( curr->left );
if( curr->right ) q.push( curr->right );
}
cout << endl;
}
return 0;
}