目录
🧡1099 Build A Binary Search Tree
💟这里是CS大白话专场,让枯燥的学习变得有趣!
💟没有对象不要怕,我们new一个出来,每天对ta说不尽情话!
💟好记性不如烂键盘,自己总结不如收藏别人!
🧡1099 Build A Binary Search Tree
题目链接:题目链接
解析
💌输入N个节点的左右节点序号,没有则为-1。最后一行输入N个节点,将其构成给出的二叉搜索树。也就是说将这一行值存入树中,中序遍历是从小到大的排序,最后层序遍历输出节点值。
代码
#include <iostream>
#include <cstdio>
#include <algorithm>
#include <queue>
using namespace std;
int node[102],cnt=0;
struct T{
int l,r,d;
}t[102];
//中序遍历存值
void dfs(int root) {
if(t[root].l!=-1) dfs(t[root].l);
t[root].d = node[cnt++];
if(t[root].r!=-1) dfs(t[root].r);
}
int main() {
int N;
cin >> N;
//记录每个节点的左右孩子序号
for (int i=0;i<N;i++) cin >> t[i].l >> t[i].r;
//记录要装入的节点
for (int i=0;i<N;i++) cin >> node[i];
sort(node,node+N); //从小到大排序
dfs(0);
queue<int> q; //存层次序列序号
queue<int> Q;
q.push(0);
while(q.size()){
for(unsigned i=0;i<q.size();i++){
if(t[q.front()].l!=-1) q.push(t[q.front()].l);
if(t[q.front()].r!=-1) q.push(t[q.front()].r);
Q.push(q.front());
q.pop();
}
}
while(N--){
if(N) cout << t[Q.front()].d << " ";
else cout << t[Q.front()].d;
Q.pop();
}
cout << endl;
return 0;
}