# include <bits/stdc++.h>
using namespace std;
int N;
struct Node{
int data;
int lchild, rchild;
Node(int d, int l, int r):data(d), lchild(l), rchild(r){}
// 没事写一下C++11的委托构造函数
Node( ):Node(0, -1, -1){}
Node(int d ):Node(d, -1, -1){}
Node(int l, int r):Node(0, l, r){}
}node[100];
int num[100];
int idx = 0;
void inOrder(int root){ // 中序遍历给结点赋值
if(root == -1) return;
inOrder(node[root].lchild);
node[root].data = num[idx++];
inOrder(node[root].rchild);
}
int cnt = 0;
void levelOrder(){ // 层序遍历输出结果
queue<int> q;
q.push(0);
while(!q.empty()){
int u = q.front();
q.pop();
cnt++;
cout << node[u].data << (cnt == N ? "\n" : " ");
if(node[u].lchild != -1) q.push(node[u].lchild);
if(node[u].rchild != -1) q.push(node[u].rchild);
}
}
int main(){
cin >> N;
for(int i = 0;i < N;++i)
cin >> node[i].lchild >> node[i].rchild;
for(int i = 0;i < N;++i)
cin >> num[i];
sort(num, num+N);
inOrder(0);
levelOrder();
return 0;
}
【PAT甲级 二叉排序树】1099 Build A Binary Search Tree (30 分)
最新推荐文章于 2021-04-17 23:56:48 发布