第十周项目2二叉树的层次遍历算法

时间:2021-09-28 11:24:07
/*
Copyright (c++) 2017,烟台大学计算机与控制工程学院
文件名称:jj
作 者:刘思源
完成日期:2017年11月8日
版 本 号:12.11
问题描述:实现二叉树的层次遍历算法,并对用”A(B(D,E(H(J,K(L,M(,N))))),C(F,G(,I)))”
创建的二叉树进行测试。 
ps:运用第九周项目1二叉树的算法库

*/

[cpp]  view plain  copy
  1. #include <stdio.h>  
  2. #include "btree.h"  
  3.   
  4. void LevelOrder(BTNode *b)  
  5. {  
  6.     BTNode *p;  
  7.     BTNode *qu[MaxSize];    //定义环形队列,存放节点指针  
  8.     int front,rear; //定义队头和队尾指针  
  9.     front=rear=-1;      //置队列为空队列  
  10.     rear++;  
  11.     qu[rear]=b;     //根节点指针进入队列  
  12.     while (front!=rear) //队列不为空  
  13.     {  
  14.         front=(front+1)%MaxSize;  
  15.         p=qu[front];        //队头出队列  
  16.         printf("%c ",p->data);  //访问节点  
  17.         if (p->lchild!=NULL)    //有左孩子时将其进队  
  18.         {  
  19.             rear=(rear+1)%MaxSize;  
  20.             qu[rear]=p->lchild;  
  21.         }  
  22.         if (p->rchild!=NULL)    //有右孩子时将其进队  
  23.         {  
  24.             rear=(rear+1)%MaxSize;  
  25.             qu[rear]=p->rchild;  
  26.         }  
  27.     }  
  28. }  
  29.   
  30. int main()  
  31. {  
  32.     BTNode *b;  
  33.     CreateBTNode(b,"A(B(D,E(H(J,K(L,M(,N))))),C(F,G(,I)))");  
  34.     printf("二叉树b: ");  
  35.     DispBTNode(b);  
  36.     printf("\n");  
  37.     printf("层次遍历序列:\n");  
  38.     LevelOrder(b);  
  39.     DestroyBTNode(b);  
  40.     return 0;  
  41. }  

第十周项目2二叉树的层次遍历算法