#include <stdio.h>
#include <malloc.h>
#define MAXSIZE 100
struct BTNode
{
int data;
struct BTNode *lchild,*rchild;
};
BTNode *SqtoLink(int a[],int i,int n)
{
if(i<n)
{
BTNode *b=(BTNode *)malloc(sizeof(BTNode));
b->data=a[i];
b->lchild=SqtoLink(a,2*i,n);
b->rchild=SqtoLink(a,2*i+1,n);
return b;
}
else return NULL;
}
void LinktoSq(int a[],int i,BTNode *b,int &num)
{
if(b!=NULL)
{
a[i]=b->data;
num++;
LinktoSq(a,2*i,b->lchild,num);
LinktoSq(a,2*i+1,b->rchild,num);
}
}
void PreOrder(BTNode *b)
{
if(b!=NULL)
{
printf("%d ",b->data);
PreOrder(b->lchild);
PreOrder(b->rchild);
}
}
int main()
{
int a[11]={-1,1,2,3,4,5,6,7,8,9,10};
BTNode *b=SqtoLink(a,1,11);
for(int i=1;i<11;i++)
printf("%d ",a[i]);
printf("/n");
PreOrder(b);
printf("/n");
int c[MAXSIZE];
int num=1;
LinktoSq(c,1,b,num);
for(i=1;i<num;i++)
printf("%d ",c[i]);
printf("/n");
return 0;
}