算法设计题
如果以二叉链表做为存储结构,试用类C语言编写统计二叉树非叶子结点个数的层次遍历算法。
算法题
typedef struct BiTreeNode{---------------给出存储结构定义得3分
DataType data;
struct BiTreeNode *lchild,rchild;
} BiTreeNode,*BiTree;
int LevelOrder(BiTree bt){
BiTreeNode Queue[MAXNODE];/*定义队列*/
int front,rear,count;
if(bt==NULL) return 0; /*空二叉树,遍历结束*/---------1分
front=-1;rear=0;
count=0;
Queue[rear]=bt; /*根结点入队列*/----------------1分
while(rear!=front){ /*队列不空,继续遍历,否则,遍历结束*/-----1分
front++; /*出队*/---------------1分
if(Queue[front]->lchild!=NULL||Queue[front]->rchild!=NULL) ---------1分
count++; /*统计非叶子结点个数*/---------------1分
if(queue[front]->lchild!=NULL){ /*如果有左孩子,左孩子入队*/---------------1分
rear++;---------------1分
Queue[rear]=Queue[front]->lchild;---------------1分
}
if(queue[front]->rchild!=NULL){ /*如果有右孩子,右孩子入队*/---------------1分
rear++;---------------1分
Queue[rear]=Queue[front]->rchild;---------------1分
}
}
return count;
}