如果二叉树节点从数组下标1开始,那么左子树下标就是2*n,右子树就是2*n+1
#include <iostream>
#include <stdio.h>
#include <stdlib.h>
#include <memory.h>
using namespace std;
float* createTree(){
int n,level;
float x;
cout<<"请输入个数"<<endl;
cin>>n;
float *p;
p=(float *)malloc(2*n*sizeof(float));
memset(p,0,2*n*sizeof(float));
//每输入一个数就自上而下便利比父节点大的放右子树,比父节点小的放左子树;如果当前子数被占则继续往下遍历,未被占就站位
for(int i=1;i<=n;i++){
cout<<"请输入数值"<<endl;
cin>>x;
level=1;
while(p[level]!=0){
cout<<p[level]<<" ";
if(x<p[level]){
level=2*level; //左子树
}else{
level=2*level+1; //右子树
}
}
cout<<endl;
p[level]=x;
}
return p;
}
int main(void){
float *p;
p=createTree();
for(int i=0;i<18;i++){
cout<<p[i]<<" ";
}
return 0;
}