当前位置:   article > 正文

数据结构 二叉树的层次遍历 c/c++实现_c++求二叉树任意结点所在层次

c++求二叉树任意结点所在层次

目录

1.首先补充点我在这里用到的一些基本结构以及补充操作:

1.1树的结构:

1.2入队操作:

1.3出队操作

1.4初始化操作

  1.5队列判空

1.6 队列判满

2.二叉树层次遍历代码实现,假设给定一棵树T(树的结构如上)

3. 层次遍历算法思路分析


1.首先补充点我在这里用到的一些基本结构以及补充操作:

1.1树的结构:

  1. typedef char ElemType;
  2. typedef struct BiTNode
  3. { ElemType data;
  4. struct BiTNode *lchild,*rchild;
  5. }BiTNode, *BiTree;

1.2入队操作:

  1. void SQ_In(SqQueue &Q, QElemType e)
  2. // 将e入队。即:插入元素e为Q的新的队尾元素。
  3. {
  4. if(SQ_IsFull(Q)) return;//队满
  5. Q.elem[Q.rear]=e;Q.rear=(Q.rear+1)%MAXSIZE;
  6. }

1.3出队操作

  1. void SQ_Out(SqQueue &Q, QElemType &e)
  2. // 从队列Q出队一个元素,即:删除Q的队头元素,用e返回其值。
  3. {
  4. if(SQ_IsEmpty(Q)) return; //队空
  5. e=Q.elem[Q.front];Q.front=(Q.front+1)%MAXSIZE;
  6. }

1.4初始化操作

  1. void SQ_Initiate(SqQueue &Q)
  2. // 顺序队列的初始化,即构造一个空的顺序队列
  3. {
  4. Q.elem = (QElemType*)malloc(sizeof(QElemType)*MAXSIZE);
  5. Q.front=Q.rear=0;
  6. }

  1.5队列判空

  1. bool SQ_IsEmpty(SqQueue Q)
  2. // 判断顺序队列是否为空,为空返回true,否则返回false。
  3. {
  4. return Q.front==Q.rear;
  5. }

1.6 队列判满

  1. bool SQ_IsFull(SqQueue Q)
  2. // 判断顺序队列是否为满,为满返回true,否则返回false。
  3. {
  4. return (Q.rear+1)%MAXSIZE==Q.front;
  5. }

2.二叉树层次遍历代码实现,假设给定一棵树T(树的结构如上)

  1. void HierarchyOrder(BiTree T)
  2. // 二叉树的层次遍历(借助队列实现)
  3. // 参数:二叉树根指针T
  4. // 输出:二叉树的层次遍历,中间没有空格,末尾不换行。
  5. {
  6. // 请在这里补充代码,完成本关任务
  7. SqQueue Q;//定义队列
  8. SQ_Initiate(Q);//初始化队列
  9. if(T!=NULL){
  10. SQ_In(Q,T);//入根,用T来保存入队的元素
  11. }
  12. while(!SQ_IsEmpty(Q)){
  13. SQ_Out(Q,T);//用T来保存出队的元素
  14. printf("%c",T->data);
  15. if(T->lchild!=NULL)
  16. SQ_In(Q,T->lchild);//入根,用T的左孩子来保存T的左孩子结点
  17. if(T->rchild!=NULL)
  18. SQ_In(Q,T->rchild);//入根,用T的右孩子来保存T的右孩子结点
  19. }
  20. }

3. 层次遍历算法思路分析

  1. 借助队列来实现对二叉树的层次遍历,队列每出一个根,就进入两个对应的它的左右孩子,再将这两个左右孩子当作根,出去,然后再分别进入这两个左右孩子的左右孩子,依次类推。
  2. 此处,我们用T表示二叉树的根节点,出谁的时候,T 的指针就会移动到哪里,假设根节点是A,那么第一次首先是A,然后入队A的左右孩子。每出一个根,此时T的指针就指向谁,此时同时入队谁的左右孩子,顺序就不会错。

  3. 上面那个代码实现,看似T的指针好像一直没有更新,但仔细观察队列的出队和入队的函数,会发现,每次出/入队的时候,都会用T保存已经出队或入队的元素地址,以此来完成对根节点指针T的更新。   

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/小小林熬夜学编程/article/detail/515075
推荐阅读
相关标签
  

闽ICP备14008679号