题意
给定一个树结构,将一串数字填入其中,要求构成一棵二叉搜索树
题解
依据二叉搜索树 中序遍历刚好是从小到大排列的性质,在中序遍历的过程中赋值,然后层序遍历输出即可
源码
#include<queue>
#include<vector>
#include<algorithm>
using namespace std;
struct Node{
int val;
Node* lchild;
Node* rchild;
Node(){val=0; lchild=rchild=NULL;}
Node(int x){
val=x;
lchild=rchild=NULL;
}
};
Node node[105];
int k=0;
vector<int>arr;
vector<int>ans;
void levelOrder(Node* root){
queue<Node*>Q;
Q.push(root);
while(!Q.empty()){
Node* temp=Q.front();
Q.pop();
ans.push_back(temp->val);
if(temp->lchild){
Q.push(temp->lchild);
}
if(temp->rchild){
Q.push(temp->rchild);
}
}
}
void inOrder(Node* root){
if(root==NULL)
return;
inOrder(root->lchild);
root->val=arr[k++];
inOrder(root->rchild);
}
int main(){
int n;
cin>>n;
for(int i=0;i<n;i++){
int x,y;
cin>>x>>y;
node[i].val=i;
if(x!=-1)
node[i].lchild=&node[x];
if(y!=-1)
node[i].rchild=&node[y];
}
for(int i=0;i<n;i++){
int x;cin>>x;
arr.push_back(x);
}
sort(arr.begin(),arr.end());
inOrder(&node[0]);
levelOrder(&node[0]);
for(int i=0;i<ans.size()-1;i++){
cout<<ans[i]<<" ";
}
cout<<ans[ans.size()-1]<<endl;
return 0;
}