蒟蒻想将二分插入排序改进一下,于是用二叉树来模拟插入,其中左节点的权值小于根节点的权值,右节点的权值大于等于根节点的权值,这样就能中序遍历输出有顺序的数了。
他用指针指向一个根节点个左子树和右子树,然而他不知道怎么判断左右子树的存在,所以向 dalao 们求助。
代码如下:
#include<bits/stdc++.h>
using namespace std;
struct Tree {
int value;
int No;
Tree *Tleft=NULL,*Tright=NULL;
void In_order() {
if(this->Tleft) this->Tleft->In_order();
cout<<this->value<<" ";
if(this->Tright) this->Tright->In_order();
}
}qqsort[1000];
void insert(Tree x){
int _No=1;
int root=qqsort[_No].value;
while(true){
if(x.value<root){
if(qqsort[_No].Tleft!=NULL){
root=qqsort[_No].Tleft->value;
_No=qqsort[_No].Tleft->No;
}else{
qqsort[_No].Tleft=&x;
return;
}
}else{
if(qqsort[_No].Tright!=NULL){
root=qqsort[_No].Tright->value;
_No=qqsort[_No].Tright->No;
}else{
qqsort[_No].Tright=&x;
return;
}
}
}
}
int main(){
int n;
cin>>n;
cin>>qqsort[1].value;
qqsort[1].No=1;
for(int i=2;i<=n;i++){
qqsort[i].No=i;
cin>>qqsort[i].value;
insert(qqsort[i]);
}
qqsort[1].In_order();
}
如果有其他错误也麻烦指出,谢谢。