二叉树数组表示法
二叉树使用的结构声明:
struct tree
{
int data;
int left;
int right;
};
typedef struct tree treenode;
treenode btree[N];
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
#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);
}