顺序存储表示:
#include<stdio.h>
#include<string.h>
#include<stdlib.h>
#include<math.h>
#define MAX_TREE_SIZE 100
#define ClearBiTree InitBiTree
#define DestroyBiTree InitBiTree
#define Nil 0 //初始值
typedef int SqBiTree[MAX_TREE_SIZE];
typedef struct
{
int level,order; //节点的层,本层序号
}position;
void InitBiTree(SqBiTree T) //初始化树
{
int i;
for(i = 0;i < MAX_TREE_SIZE;i++)
T[i]=Nil;
}
void CreatBiTree(SqBiTree T) //建树
{
int i;
#if CHAR 节点为char类型
int l;
char s[MAX_TREE_SIZE+1];
InitBiTree(T);
printf("请输入节点的值,空格表示空节点,节点数<=%d",MAX_TREE_SIZE);
gets(s);
l = strlen(s);
for(i = 0;i < l;i++)
T[i] = s[i];
#if char
InitBiTree(T);
printf("请输入节点的值,0表示空节点,输入999结束,节点数<=%d",MAX_TREE_SIZE);
while(1)
{
scanf("%d",&T[i]);
if(999 == T[i])
{
T[i] = Nil;
break;
}
i += 1;
}
for(i = 0;i < MAX_TREE_SIZE;i++)
if(T[(i+1)/2-1] == Nil && T[i] != Nil)
printf("ERROR,NO PARENTS!");
}
int BiTreeEmpty(SqBiTree T) //判断树是否为空
{
if(T[0] == Nil)
return 1;
return 0;
}
int BiTreeDepth(SqBiTree T) //返回树的深度
{
int i,j;
for(i = MAX_TREE_SIZE;i >= 0;i--)
{
if(T[i] != Nil)
break;
}
j = 0;
while(i >= pow(2,j++));
return j;
}
int Root(SqBiTree T) //若存在根,则返回根;若无,则返回Nil
{
if(BiTreeEmpty(T))
return Nil;
return T[0];
}
int Value(SqBiTree T,SqBiTree *postion) //获取某位置的元素的值
{
return T[(int)pow(2,postion->level-1)+postion->order-2];
}