二叉树数组表示法

二叉树使用的结构声明:

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

转载于:https://my.oschina.net/garyun/blog/602921

猜你喜欢

转载自blog.csdn.net/weixin_33857230/article/details/91774596