二叉树的概念就不和大家说了,相信大家都知道。直接上代码了!
(1)普通数组
#include<stdio.h>
void create_btree( int *btree,int *data ,int len)
{
int level ,i ;
btree[1] = data [1];
for( i = 2;i <= len ; i++)
{
level = 1;
while( btree[ level] != 0)
{
if( data[i] > btree[level])
level = level *2 +1;
else
level = level *2;
}
btree[level] = data[i];
}
}
int main()
{
int btree[16];
int data[10] ={0,5,6,4,8,2,3,7,1,9};
int i;
for( i =1; i<16; i++)
btree[i] = 0;
create_btree( btree,data ,9);
for( i = 1; i < 16 ; i++ )
printf("%2d: [%d]\n",i,btree[i]);
return 0 ;
}
(2)结构体数组
#include<stdio.h>
#include<stdlib.h>
struct tree
{
int data;
int left;
int right;
};
typedef struct tree treenode;
treenode btree[15];
void create_btree( int *data ,int len)
{
int level ,i ,pos;
btree[0].data= data[0];
for( i = 1;i < len ; i++)
{
btree[i].data = data[i];
level = 0;
pos = 0 ;
while( pos != 0 )
{
if( data[i] > btree[level].data)
if(btree[level].right != -1)
level = btree[level].right;
else
pos = -1;
else
if(btree[level].left != -1)
level = btree[level].left;
else
pos = 1;
}
if ( pos == 1 )
btree[level].left = i;
else
btree[level].right = i;
printf("len = %d\n",len);
}
}
int main()
{
int data[10] ={5,6,4,8,2,3,7,1,9};
int i;
for( i =0; i<15; i++)
{
btree[i].data = 0;
btree[i].left = -1;
btree[i].right = -1;
}
create_btree(data ,9);
printf("左 数据 右 \n");
printf("-------------- \n");
for( i = 0; i < 15; i++ )
{
if( btree[i].data != 0)
printf("%2d:[%2d] [%2d] [%2d]\n",i,btree[i].left,btree[i].data,btree[i].right);
}
return 0 ;
}