注意入队的时候,只改变尾指针
出队的时候改变头指针front
//二叉链表,统计二叉树非叶子结点个数的层次遍历算法 typedef struct BNode{ Elemtype data; struct BNode *lchild,*rchild; }BNode,*BTree; int count=0; int countNode(BTree *bt) { if(bt->lchild==NULL&&bt->rchild==NULL) { count++; return ; } } //非递归算法 typedef struct BNode{ DataType data; struct BNode *lchild,*rchild; }BNode,*BTree;//定义数据结构 BNode(结点) BTree int leverOrder(Bitree bt) // { BTree Queue[MAXSIZE];//定义队列 int front,rear,count; if(bt==NULL) //空树遍历结束 front = -1;rear=0; //设置空栈 count =0; Queue[rear]=bt;//根节点入队列 while(rear!=front) //队列不空,继续遍历,否则遍历结束 { front++;//出队 紧跟rear if(Queue[front]->lchild=NULL||Queue[front]->rchild!=NULL) { count++; } if(Queue[front]->lchild!=NULL)//左孩子入队 { rear++; Queue[rear]=Queue[front]->lchild; } if(Queue[front]->rchild!=NULL) { rear++; Queue[rear]=Queue[front]->rchild; } return count; } }