第十周项目1(1)- 二叉树的层次遍历算法

来源:互联网 发布:网络平台借钱不还 编辑:程序博客网 时间:2024/06/05 10:01
  1. /* 
  2. *Copyright(c)2017,烟台大学计算机学院 
  3. *All right reserved. 
  4. *文件名:sk.cpp btree.h btree.cpp 
  5. *作者:盛凯 
  6. *完成日期:2017年11月10日 
  7. *版本号:v1.0 
  8. * 
  9. *问题描述:
  10. *输入描述:无 
  11. *程序输出:见运行结果 
  12. sk.cpp:

  13. #include <stdio.h>
    #include "btree.h"


    void LevelOrder(BTNode *b)
    {
        BTNode *p;
        BTNode *qu[MaxSize];    //定义环形队列,存放节点指针
        int front,rear; //定义队头和队尾指针
        front=rear=-1;      //置队列为空队列
        rear++;
        qu[rear]=b;     //根节点指针进入队列
        while (front!=rear) //队列不为空
        {
            front=(front+1)%MaxSize;
            p=qu[front];        //队头出队列
            printf("%c ",p->data);  //访问节点
            if (p->lchild!=NULL)    //有左孩子时将其进队
            {
                rear=(rear+1)%MaxSize;
                qu[rear]=p->lchild;
            }
            if (p->rchild!=NULL)    //有右孩子时将其进队
            {
                rear=(rear+1)%MaxSize;
                qu[rear]=p->rchild;
            }
        }
    }


    int main()
    {
        BTNode *b;
        CreateBTNode(b,"A(B(D,E(H(J,K(L,M(,N))))),C(F,G(,I)))");
        printf("二叉树b: ");
        DispBTNode(b);
        printf("\n");
        printf("层次遍历序列:\n");
        LevelOrder(b);
        DestroyBTNode(b);
        return 0;
    }

  14. 反思总结:
  15. 运用环形队列和递归,每次将顶点元素出队,并且将它的左右子树入队,直到队列为空,将其全部输出。
阅读全文
0 0