/**
* 用数组模仿树结构,原则是左小右大
* treeArr.c
* version:1.0 2006-9-15
* writeby jsp
*/
#include "stdio.h"
void creat(int *nodlist , int *b_tree , int len)
{
int lay,i;//lay 层
b_tree[1] = nodlist[1];
for(i = 2; i < len; i++)
{
lay = 1;
while( b_tree[lay] != 0)//用于判断b_tree[lay]这个节点是否为空如果为空就把nodlist[i]付给它;
{
if(nodlist[i] > b_tree[lay])//判断是左子树还是右子树.如果b_tree[lay]不为空则找b_tree[lay]的子节点
lay = 2 *lay+1;//下个右叶节点
else
lay = 2 *lay;//下个左叶节点
}
b_tree[lay] = nodlist[i];
}
}
void main()
{
int i,index; //index用于存放输入数组的索引号,i循环变量
int data;
int nodlist[16];//输入数组
int b_tree[16];//树结构
index = 0;
for(i = 0 ; i < 16; i++)
{
nodlist[i]=0;
}
do
{
index+=1;
scanf("%d",&data);
nodlist[index] = data;
}while(data != 0);
for(i = 1; i < 16; i++)
{
b_tree[i] = 0;
}
creat(nodlist , b_tree , index);
for(i = 1; i < 16; i++)
{
printf("[%d]:%d/n",i,b_tree[i]);
}
}