算法思想:对树/森林逐层遍历,遍历的层数即为所求高度
#define maxlen 100
typedef int elem;
typedef struct forestnode {
struct forestnode* firstson;
struct forestnode* nextbrother;
elem data;
int number;
}Fnode;
typedef struct forest {
Fnode* root;
int size;
}Forest;
int Fheight(Forest* t)
{
Fnode* node[maxlen];
bool sign = false;
int head = 0;
int rear = 0;
int end = rear;
int aim = head;
Fnode* p = t->root;
int height = 0;
node[end] = p;
start:
while (aim <= end)
{
p = node[aim];
while (p->nextbrother)
{
rear++;
node[rear] = p->nextbrother;
p = p->nextbrother;
}
aim++;
}
aim = head;
end = rear;
height++;
while (aim <= end)
{
if (node[aim]->firstson)
{
sign = true;
rear++;
node[rear] = node[aim]->firstson;
}
aim++;
}
if (!sign)
return height;
end = rear;
head = aim;
sign = false;
goto start;
}