二叉树使用的结构声明:
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);
}
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);
}