这个思路其实很好理解,我们不需要建树,用一个数组模拟二叉树输出即可,因为左键值大,右键值小,大的向左移,小的向右移,之后便简单了。左移的是2*n,右移的是2*n+1,如果我们将2*n+1和2*n中得出了比我们输入数大的情况便不是完全二叉搜索树了。这里我们用递归方式保存这个最大值。
void insert(int num,int yu)
{
if(node[num]==0)//这里因为初值为零,相当于空
{
node[num]=yu;
maxnode=max(maxnode,num);保存最大值,最大值为全局变量
return ;
}
else if(node[num]<yu)左
{
insert(num*2,yu);
}
else if(node[num]>yu)右
{
insert(num*2+1,yu);
}
}
最后要求我们输出层序遍历,就是我们在数组当中的插入顺序,但如果遇到空就是数组元素为0的情况下不输出。
具体代码如下
#include<bits/stdc++.h>
using namespace std;
int node[100];
int maxnode=0;
void insert(int num,int yu)
{
if(node[num]==0)
{
node[num]=yu;
maxnode=max(maxnode,num);
return ;
}
else if(node[num]<yu)
{
insert(num*2,yu);
}
else if(node[num]>yu)
{
insert(num*2+1,yu);
}
}
int main()
{
int p;cin>>p;
int flag;
for(int i=1;i<=p;i++)
{
cin>>flag;
insert(1,flag);
}
if(node[1]!=0)cout<<node[1];
for(int i=2;i<=maxnode;i++)
{
if(node[i]!=0)cout<<" "<<node[i];
}
cout<<endl;
if(maxnode==p)cout<<"YES";
else cout<<"NO";
}