定义:若设二叉树的高度为h,除第 h 层外,其它各层 (1~h-1) 的结点数都达到最大个数,第 h 层从右向左连续缺若干结点,这就是完全二叉树。 |
#include <stdio.h>
void createbtree (int *btree, int *data, int len)
{
int level; /*树的层数*/
int i;
btree [1] = data [1]; /*创建根结点*/
for (i = 2; i <= len; i++) { /*循环创建其它结点*/
level = 1;
while ( btree [level] != 0) { /*是否有子树*/
if (data [i] > btree [level]) /*是左或右子树*/
level = level * 2 + 1; /*右子树*/
else
level = level * 2; /*左子树*/
}
btree [level] = data [i];
}
}
int main()
{
int btree [16]; /*二叉树数组*/
/*二叉树结点数据*/
int data [10] = {0, 5, 6, 4, 8, 2, 3, 7, 1, 9};
int i;
for (i = 1; i < 16; i++)
btree [i] = 0; /*清除二叉树数组*/
createbtree (btree, data, 9);
for (i = 1; i < 16; i++)
printf ("%2d: [%d] \\n", i, btree[i]);
return (0);
}
beyes@linux-beyes:~/C/structer/BinaryTree> ./array_tree.exe
1: [5]
2: [4]
3: [6]
4: [2]
5: [0]
6: [0]
7: [8]
8: [1]
9: [3]
10: [0]
11: [0]
12: [0]
13: [0]
14: [7]
15: [9]
left | data | right |
struct tree {
int data;
int left;
int right;
};
#include <stdio.h>
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; /*连接右子数*/
}
}
/*-------------------------------*/
/*主程序:创建结构数组的二叉树结构*/
/*-------------------------------*/
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");
for (i = 0; i < 15; i++)
if (btree[i].data != 0)
printf ("%2d:[%2d] [%2d] [%2d]\\n", i, btree[i].left,
btree[i].data, btree[i].right);
return (0);
}
运行与输出:
beyes@linux-beyes:~/C/structer/BinaryTree> ./struct_tree.exe
左 数据 右
0:[ 2] [ 5] [ 1]
1:[-1] [ 6] [ 3]
2:[ 4] [ 4] [-1]
3:[ 6] [ 8] [ 8]
4:[ 7] [ 2] [ 5]
5:[-1] [ 3] [-1]
6:[-1] [ 7] [-1]
7:[-1] [ 1] [-1]
8:[-1] [ 9] [-1]
欢迎光临 曲径通幽论坛 (http://www.groad.net/bbs/) | Powered by Discuz! X3.2 |