二叉树用数组表示

/*复杂的编程,思考永远是最重要的*/

#include "stdio.h"
#include "stdlib.h"
#include "math.h"

int b_tree[20]={0};
//int count=0;//因为count不能由开始输入的数据个数直接看出来 ,故我直接用全局 变量方便随时使用 

//这段程序我借鉴了链表建立二叉树的方法,值得仔细推敲 
void creat_Tree( int *nodelist , int *b_tree ,int n )
{
 int i;
 int j;//遍历层数 
  for(i=1;i<=n;i++)
  {
      j=1;
      while( b_tree[j]!= 0 )
       {
         if(b_tree[j]>nodelist[i])
          j=2*j;
         else
          j=2*j+1;
       }
      b_tree[j]=nodelist[i];
      count=j;//二叉树结构中有效元素的个数,即index -1;
  }
}

void print_Tree()//按照二叉树的形式输出数据 
{
  int i,j,m;
  m=log(1+count)/log(2);//确定层数
  for(j=1;j<=m;j++)
  {
    i=(int)pow(2,j-1);//每一层开始的数据下标 
    while( i<=(int)pow(2,j)-1 )
    {
      if(b_tree[i]!=0)
       printf("[%d] " ,b_tree[i]); 
      else
       printf(" ");
      i++;
    } 
    printf("\n");            
  }      
     
}
int main(){
    
int value;
int nodelist[20];
int index=1;//输入数据的个数+1 

printf("please input some datas to array nodelist:\n");
 scanf("%d",&value);

while( value != 0 )
 {
  nodelist[index]=value;
  index++;
  scanf("%d",&value);
 }
//有效下标为1 to index-1;

creat_Tree( nodelist ,b_tree ,index-1 );

printf("bintree is :\n");
print_Tree();
  
system("pause");
return 0;
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值