

// * ======================================== */
// * 程式实例:
7_3_1.c
*/
// *
二叉树的数组表示法
*/
// * ======================================== */
// * ---------------------------------------- */
// *
建立二叉树
*/
// * ---------------------------------------- */
void createbtree(int *btree,int *data,int len)
{
int
level;
// *
树的阶层
*/
int i;
btree[1] =
data[1];
// *
建立根节点
*/
for ( i = 2; i
<= len; i++
)
// * 用回路建立其它节点 */
{
level =
1;
// *
从阶层1开始
*/
while ( btree[level] != 0 ) //
*
是否有子树
*/
{
if ( data[i] > btree[level]
) // * 是左或右子树
*/
level = level * 2 + 1; // *
右子树
*/
else
level = level *
2;
// *
左子树
*/
}
btree[level] =
data[i];
// *
存入节点数据
*/
}
}
// * ---------------------------------------- */
// * 主程式:
建立数组的二叉树.
*/
// * ---------------------------------------- */
void 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]);
}

// * ======================================== */
// * 程式实例:
7_3_2.c
*/
// *
二叉树的结构数组表示法
*/
// * ======================================== */
#include <stdlib.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;
// *
设定pos值
*/
while ( pos == 0
)
// * 用回路找节点位置 */
{
// * 比较是左或右子树 */
if ( data[i] > btree[level].data )
// * 右树是否有下一阶层 */
if ( btree[level].right != -1 )
level = btree[level].right;
else
pos =
-1;
// *
是右树
*/
else