博客迁移(原地址:https://blog.youkuaiyun.com/u011089653/article/details/75726190)
https://www.patest.cn/contests/pat-a-practise/1099
题意大概:
给定一棵BST的节点数,树的结构,以及各个节点的权值,求此树层次遍历的结果
解题思路:
1.使用孩子兄弟法存储输入数据
2.对各个节点的权值进行排序
3.通过中序遍历可以得到各节点从小到大的的有序权值。这里通过中序遍历对结构体重的权值进行赋值(构建BST)
4.通过层次遍历获取结果
5.根据题目要求,格式化输出结果。
#include<iostream>
#include<algorithm>
#include<queue>
using namespace std;
const int mmax=101;
struct node{
int l,r;
int data;
}tree[mmax];
int num;
void midtrv(int root,int val[])
{
if(root!=-1)
{
midtrv(tree[root].l,val);
tree[root].data=val[num];
num++;
midtrv(tree[root].r,val);
}
}
queue<int> myqueue;
int val[mmax];
void leveltrv(int root)
{
num=0;
if(root!=-1)
{
myqueue.push(root);
while(!myqueue.empty())
{
int t=myqueue.front();
myqueue.pop();
val[num++]=tree[t].data;
if(tree[t].l!=-1)
myqueue.push(tree[t].l);
if(tree[t].r!=-1)
myqueue.push(tree[t].r);
}
}
}
int main()
{
int n;
num=0;
cin>>n;
for(int i=0;i<n;i++)
{
cin>>tree[i].l>>tree[i].r;
}
for(int i=0;i<n;i++)
cin>>val[i];
sort(val,val+n);
midtrv(0,val);
leveltrv(0);
for(int i=0;i<n-1;i++)
cout<<val[i]<<" ";
cout<<val[n-1]<<endl;
return 0;
}