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

来源:互联网 发布:淘宝怎么上食用农产品 编辑:程序博客网 时间:2024/05/21 12:45

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

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



0 0