二叉树顺序存储结构
#define VirNode '0'
#define MAX_TREE_SIZE 100
typedef char ElemType;
typedef ElemType SqBitTree[MAX_TREE_SIZE];
void leveltree(SqBitTree bt)
{
int i, j;
i = 1;
while (i <= bt[0])
{
for (j = i; j < 2 * i; j++) {
if (bt[j] == VirNode)
}
}
void crebittree(SqBitTree bt, int n)
{
int i = 1, j, m = 0;
while (m < n)
{
for (j = i; j < 2 * i; j++)
{
scanf("%c", bt + j);
if (bt[j] != VirNode)
m++;
}
i = 2 * i;
}
bt[0] = i - 1;
}
void exchangetree(SqBitTree bt)
{
int k = 2, i, j;
ElemType t;
while (k < bt[0])
{
for (i = k, j = 2 * k - 1; i < j; i++, j--)
{
t = bt[i];
bt[i] = bt[j];
bt[j] = t;
}
k = 2 * k;
}
}
int countleaf(SqBitTree bt)
{
int i=1, j, n=0;
while (i < bt[0] / 2)
{
for (j = i; j < 2 * i; j++)
{
if (bt[j] != VirNode && bt[2 * j] == VirNode && bt[2 * j + 1] == VirNode)
n++;
i = 2 * i;
}
for (j = i; j < 2 * i; j++)
{
if (bt[j] != VirNode)
n++;
return n;
}
}
}
int high(SqBitTree bt)
{
int i=1, h=0;
while (i < bt[0])
{
h++;
i = 2 * i;
}
return h;
}
int count2(SqBitTree bt)
{
int i = 1, j, n = 0;
while (i < bt[0] / 2)
{
for (j = i; j < 2 * i; j++)
{
if (bt[j] != VirNode && bt[2 * j] != VirNode && bt[2 * j + 1] != VirNode)
n++;
i = 2 * i;
}
return n;
}
}
int count1(SqBitTree bt)
{
int i = 1, j, n = 0;
while (i <= bt[0] / 2)
{
for (j = i; j < 2 * i; j++) {
if (bt[j] != VirNode && (bt[2 * j] != VirNode && bt[2 * j + 1] == VirNode || bt[2 * j] == VirNode && bt[2 * j + 1] != VirNode))
n++;
i = 2 * i;
}
i = 2 * i;
}
}
int search(SqBitTree bt, ElemType x, ElemType* pa, ElemType* lc, ElemType* rc)
{
int i = 1;
while (i < bt[0] && bt[i] != x)
i++;
if (i > bt[0])
{
printf("Not found!\n");
*pa = *lc = *rc = VirNode;
return 0;
}
if (i == 1) {
printf("This node has not parents!\n");
*pa = VirNode;
}
else
*pa = bt[i / 2];
if (i > bt[0] / 2 || bt[2 * i] == VirNode)
{
printf("This node has not left child!\n");
*lc = VirNode;
}
else
*lc = bt[2 * i];
if (i > bt[0] / 2 || bt[2 * i + 1] == VirNode)
{
printf("This Node has not right child!\n");
*rc = VirNode;
}
else
*rc = bt[2 * i + 1];
return 1;
}