您的位置:首页 > 产品设计 > UI/UE

Sicily 1935. Rebuild the tree

2014-01-02 16:39 288 查看
题目大意:根据前序和中序重建二叉树,并按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;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: