- 这里简述孩子兄弟链表的非递归算法,如果A结点存在左孩子,且A结点的兄弟结点没有孩子,则该兄弟可以跳过不入队(因为A结点的兄弟结点树的高度不可能比A结点左孩子所在高度更高)
#define MaxSize 20
typedef struct CsNode{
struct CsNode* firstchild;
struct CsNode* nextsibling;
int data;
}CsNode;
int height(CsNode* node){
if (node == NULL) {
return 0;
}
int hchild = height(node->firstchild);
int hsibling = height(node->nextsibling);
int ret = hchild+1 > hsibling ? hchild+1 : hsibling;
return ret;
}
int heightNoRec(CsNode* t)
{
CsNode* Q[MaxSize];
if(t == NULL)
return 0;
else{
int front = 1,rear = 1;
int last = 1,h = 0;
Q[rear] = t;
while(front <= last)
{
t = Q[front++];
while(t != NULL)
{
if (t->firstchild)
{
cout<<"enque:"<<t->firstchild->data<<endl;
Q[++rear] = t->firstchild;
}
t = t->nextsibling;
}
if(front > last)
{
h++;
last=rear;
}
}
return h;
}
}