二叉樹的幾種實現方式(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 ; 
}



發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章