#include <iostream>
#include <algorithm>
#include <vector>
#include <queue>
//BST中序序列递增 中序遍历树并用中序序列数值按顺序赋值即可
using namespace std;
int number[1000];
int index;
int N;
vector<int> v,bfs;
struct node{
int data;
int lchild;
int rchild;
}Node[110];
void inOrder(int root){
if(root==-1){
return;
}
inOrder(Node[root].lchild);
Node[root].data = number[index++];
v.push_back(Node[root].data);
inOrder(Node[root].rchild);
}
void BFS(int root){
queue<node> q;
q.push(Node[root]);
while (!q.empty()){
int now = q.front().data;
int lchild = q.front().lchild;
int rchild = q.front().rchild;
q.pop();
bfs.push_back(now);
if(lchild!=-1){
q.push(Node[lchild]);
}
if(rchild!=-1){
q.push(Node[rchild]);
}
}
}
int main() {
cin>>N;
for(int i=0;i<N;i++){
cin>>Node[i].lchild;
cin>>Node[i].rchild;
}
for(int i =0;i<N;i++){
cin>>number[i];
}
//下面得到了该树中序遍历
sort(number,number+N);
//中序遍历,并且用上面的序列为树赋值
inOrder(0);
// for(int i =0;i<v.size();i++){
// cout<<v[i]<<endl;
// }
// cout<<"============="<<endl;
BFS(0);
//下面获得层次遍历
for(int i =0;i<bfs.size();i++){
if(i==0){
cout<<bfs[i];
} else{
cout<<" "<<bfs[i];
}
}
return 0;
}
浙江大学PAT甲级A1099(C++)题解
最新推荐文章于 2022-09-13 23:30:00 发布