二叉树的几种实现方式(1)数组法

二叉树的概念就不和大家说了,相信大家都知道。直接上代码了!

(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 ; 
}



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值