【数据结构】二叉树的层次遍历

在上一篇文章 【数据结构】二叉树的中序遍历  中我们学会了前中后序遍历,并着重讲述了中序遍历的思路及其实现代码(1 + 2),今天我们讲一讲二叉树的层次遍历。

层次遍历,顾名思义,就是按层次来遍历整棵二叉树。层次是怎么定义的呢?二叉树的根节点为第一层,就如同倒过来的楼层一样。

要想实现层次遍历,我们需要借助另一个数据结构「 队列 」。至于为什么嘛?因为队列的特点是先进先出。利用这个特点,我们可以将已经访问过的结点的子节点存进队列里,实现每个层次的顺序不变。

以上图为例,进队出队的顺序如下:1 入队,2 入队,3 入队;1 出队;4 入队,5 入队;2 出队;6 入队; 3 出队;4 出队;5 出队;6 出队;结束。

简单的说,就是根节点进队,其子节点也跟着进队,随后根节点出队(或者根节点先出队,子节点再进队),直至队列为空,函数结束。

那么用代码如何实现呢?我们先来看一个比较麻烦点的:

 

//层次遍历二叉排序树
void Cengcibianli(BiTree &T)
{
   printf("以下为层次遍历结果。\n");
   Queue Q;
   InitQueue(Q); //初始化队列
   if(T)
      Enqueue(Q,T);  //进队
   while(!QueueEmpty(Q))   //队非空
   {
       Delqueue(Q);   //出队
   }
   printf("\n");
}

具体的代码请点击下面的网址:

paste.ubuntu.com/p/PcFNtNpYr2/

和中序遍历一样,层次遍历也有个简单的代码实现方式:

 

status Level_view(BTpoint T,Quence Q)   //层次遍历 
{
 if(T!=NULL)
 {
    *Q.rear++=T;
    while(Q.front!=Q.rear)
    {
      if(T->lchild!=NULL) *Q.rear++=T->lchild;
      if(T->rchild!=NULL) *Q.rear++=T->rchild;
      T=*Q.front++;
      printf("%d ",T->data);
      T=*Q.front;
    }
 }   
 return OK;
}

具体代码实现可借鉴上篇文章【数据结构】二叉树的中序遍历  ,我把代码放在了评论区,请自行查看。

那么,今天的分享就到此结束了,谢谢查阅,欢迎留言交流。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

暗星涌动

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值