题意:建立一颗二叉搜索树,当建立好后,把给定的一些值填入节点中,最后求层序遍历
思路:先建立该二叉树,然后进行中序遍历,可以看到二叉搜索树的中序遍历即是数字从小到大的映射,故中序遍历的时候把该点的值填入其中,然后也可以填入层次以及下标,根据层次和下标进行排序,就可以得到层次遍历了
代码:
#include<iostream>
#include<vector>
#include<algorithm>
using namespace std;
int n = 0,num = 0;
struct node {
int data,l,r,index,level;
}nodes[150];
vector<int> p;
void inTravel(int root,int index,int level){
if (nodes[root].l != -1)inTravel(nodes[root].l, index * 2, level + 1);
nodes[root].data = p[num++];
nodes[root].index = index;
nodes[root].level = level;
if (nodes[root].r != -1)inTravel(nodes[root].r, index * 2+1, level + 1);
}
bool com(node a,node b) {
if (a.level != b.level)return a.level < b.level;
else return a.index < b.index;
}
int main(){
cin >> n;
p.resize(n);
for (int i = 0; i < n; i++) {
int l, r;
cin >> l >> r;
nodes[i].l = l;
nodes[i].r = r;
}
for (int i = 0; i < n; i++) scanf("%d",&p[i]);
sort(p.begin(),p.end());
inTravel(0,0,0);
sort(nodes + 0, nodes + n,com);
for (int i = 0; i < n; i++) {
printf("%d%s",nodes[i].data,i==n-1?"\n":" ");
}
system("pause");
return 0;
}