该存储结构适用于 完全二叉树,非完全二叉树会造成空间浪费
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <math.h>
#pragma warning (disable:4996)
#define MAX_TREE_SIZE 100
#define OK 0
#define ERROR -1
typedef int status;
typedef int elemtype;
typedef elemtype sqbitree[MAX_TREE_SIZE];
typedef struct {
int level;
int order;
}position;
status initbitree(sqbitree t) {
if (t == NULL) return ERROR;
int i;
for (i = 0;i < MAX_TREE_SIZE;i++)
t[i] = 0;
return OK;
}
status clearbitree(sqbitree t) {
if (t == NULL) return ERROR;
int i;
for (i = 0;i < MAX_TREE_SIZE;i++)
t[i] = 0;
return OK;
}
status createbitree(sqbitree t) { //如果i>=MAX_TREE_SIZE会出现错误
if (t == NULL)return ERROR;
int i = 0;
printf("请按层序输入结点的值(整型),0表示空结点,输999结束。结点数≤%d:\n", MAX_TREE_SIZE);
while (1) {
scanf("%d", &t[i]);
if (t[i] == 999)break;
if (i != 0 && t[i] != 0 && t[(i + 1) / 2 - 1] == 0) {
printf("出现结点存在,但是双亲为空的情况");
return ERROR;
}
i++;
}
while (i < MAX_TREE_SIZE) {
t[i] = 0;
i++;
}
return OK;
}
int bitreedepth(sqbitree t) {
if (t == NULL)return -1;
int i, j = -1;
for (i = MAX_TREE_SIZE - 1;i >= 0;i--)
if (t[i] != 0) break;
i++;
do
{
j++;
}while (i >= pow(2, j));
return j;
}
int main() {
sqbitree bt;
initbitree(bt);
createbitree(bt);
int depth = bitreedepth(bt);
printf("%d\n", depth);
system("pause");
}