1099 Build A Binary Search Tree
主要是level order 遍历和建表
#include <iostream>
#include <algorithm>
#include <vector>
#include <queue>
using namespace std;
vector<int> num;
typedef struct node pn;
struct node
{
int left;
int right;
int data;
/* data */
}tree[101];
int nb;
vector<int> v;
queue<int> que;
int level(){
que.push(0);
while(!que.empty()){
int temp=que.front();
que.pop();
v.push_back(temp);
if(tree[temp].left!=-1) que.push(tree[temp].left);
if(tree[temp].right!=-1) que.push(tree[temp].right);
}
}
int fill(int i){
if(tree[i].left!=-1) fill(tree[i].left);
tree[i].data = num[nb];
nb++;
//cout << "n: " << nb << " ";
if(tree[i].right!=-1) fill(tree[i].right);
}
/*
int print(int i){
if(tree[i].left!=-1) print(tree[i].left);
printf("%d ",tree[i].data);
if(tree[i].right!=-1) print (tree[i].right);
}
*/
int main(int argc, char const *argv[])
{
/* code */
int n,a,b;
cin >> n;
for (int i = 0; i < n; ++i)
{
/* code */
cin >> a >> b;
tree[i].left=a;
tree[i].right=b;
}
for (int i = 0; i < n; ++i)
{
cin >> a;
num.push_back(a);
/* code */
}
sort(num.begin(), num.end());
/*
for (int i = 0; i < n; ++i)
{
cout << num[i] << " ";
}
cout << endl;
*/
fill(0);
//print(0);
level();
for (int i = 0; i < n; ++i)
{
cout << tree[v[i]].data;
if(i != n-1) cout << " ";
}
return 0;
}