注意点:
根结点已经给出,就是0,二叉查找树的中序遍历是一个递增序列,所以将一个序列排序后插入二叉树就可以了。
#include <cstdio>
#include <queue>
#include <algorithm>
#include <vector>
using namespace std;
const int maxn = 110;
int n, in[maxn], num = 0;
struct node
{
int lchild, rchild;
int data;
}Node[maxn];
void inorder(int root)
{
if(root == -1) return;
inorder(Node[root].lchild);
Node[root].data = in[num++];
inorder(Node[root].rchild);
}
vector<int> vec; //将结果存在vec中
void BFS(int root)
{
queue<int> q;
q.push(root);
while(!q.empty())
{
int top = q.front();
q.pop();
vec.push_back(Node[top].data);
if(Node[top].lchild != -1)
q.push(Node[top].lchild);
if(Node[top].rchild != -1)
q.push(Node[top].rchild);
}
}
int main()
{
int lchild, rchild;
scanf("%d", &n);
for(int i = 0; i < n; i++)
{
scanf("%d%d", &lchild, &rchild);
Node[i].lchild = lchild;
Node[i].rchild = rchild;
}
for(int i = 0; i < n; i++)
scanf("%d", &in[i]);
sort(in, in + n);
inorder(0);
BFS(0);
for(int i = 0;i < n;i++)
{
if(i > 0) printf(" ");
printf("%d",vec[i]);
}
return 0;
}