思路:
第一步:建树
第二步:将输入的结点升序排序
第三步:中序遍历树,依次填入排好序的结点
第四步:层序遍历树,输出结果
#include<algorithm>
#include<iostream>
#include<queue>
using namespace std;
const int M = 110;
int n, nodes[M][3], v[M];
void initTree() {
cin >> n;
for (int i = 0; i < n; i++) cin >> nodes[i][0] >> nodes[i][1];
}
void insertNode(int root, int& index) {
if (root != -1) {
insertNode(nodes[root][0], index);
nodes[root][2] = v[index++];
insertNode(nodes[root][1], index);
}
}
void fillTree() {
int idx = 0;
for (int i = 0; i < n; i++) cin >> v[i];
sort(v, v + n);
insertNode(0, idx);
}
void level() {
int idx = 1, (*tmp)[3];
queue<int(*)[3]> q;
q.push(&nodes[0]);
while (!q.empty()) {
tmp = q.front();
idx++;
idx == n + 1 ? cout << tmp[0][2] : cout << tmp[0][2] << " ";
q.pop();
if (tmp[0][0] != -1) q.push(&nodes[tmp[0][0]]);
if (tmp[0][1] != -1) q.push(&nodes[tmp[0][1]]);
}
}
int main() {
initTree();
fillTree();
level();
return 0;
}