任意二叉搜索树的构建方法,本题采用二叉树静态写法较为方便
坑点如下
1,将输入序列从小到大依次排列为对应二叉搜索树的中序遍历
2,
采用DFS方法将中序遍历序列依次存入二叉搜索树中,注意递归边界。
void DFS(int root,int data){
if(root==-1)return ;
DFS(node[root].lchild,in[num]);
node[root].data=in[num++];
DFS(node[root].rchild,in[num]);
}
整体代码如下
#include<cstdio>
#include<vector>
#include<algorithm>
#include<queue>
using namespace std;
const int maxn=110;
int num=0;
int n;
int in[maxn];
struct node{
int data;
int lchild;
int rchild;
}node[maxn];
void DFS(int root,int data){
if(root==-1)return ;
DFS(node[root].lchild,in[num]);
node[root].data=in[num++];
DFS(node[root].rchild,in[num]);
}
int main(){
scanf("%d",&n);
for(int i=0;i<n;i++){
scanf("%d %d",&node[i].lchild,&node[i].rchild);
}
for(int i=0;i<n;i++){
scanf("%d",&in[i]);
}
sort(in,in+n);
DFS(0,in[0]);
queue<int>Q;
Q.push(0);
int num1=0;
while(!Q.empty()){
int q=Q.front();
Q.pop();
printf("%d",node[q].data);
num1++;
if(num1!=n)printf(" ");
if(node[q].lchild!=-1){Q.push(node[q].lchild);}
if(node[q].rchild!=-1){Q.push(node[q].rchild);}
}
return 0;
}