二叉树数组表示法

二叉树使用的结构声明:

     struct  tree

  {

     int data;

     int left;

     int right;

  };

  typedef struct  tree treenode;

  treenode  btree[N];

 

用数组表示二叉树
#include"iostream"
using namespace std;

struct tree //二叉树结构声明
{
int data;
int left;
int right;

};
typedef
struct tree treenode;
treenode btree[
15];

/*----创建二叉树---*/
void createbtree( int *data,int len)
{
int level;
int pos; //-1为左树,1是右树;
int i;
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; //连接右子树
}
}
/*------------创建结构数组的二叉树状结构-----------*/
/* -1 表示没有下一层数*/
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;
}
createbtree(data,
9);
printf(
" 左 数据 右\n");
printf(
"-----------------\n");
for(i=0;i<15;i++)

if(btree[i].data!=0)
if(btree[i].data!=0)
printf(
"%2d:[%2d] [%2d] [%2d]\n",i,btree[i],left, btree[i].data,btree[i].right);
}

 

posted @ 2010-11-21 20:33  聊聊IT那些事  阅读(2708)  评论(0编辑  收藏  举报