首页 > 技术文章 > 关于栈和队列

chuanxuzhao 2020-12-18 23:16 原文

 

 

 

 

 

 注意入队的时候,只改变尾指针 

出队的时候改变头指针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;

  }



}

 

推荐阅读