二叉树层次遍历算法自上而下,从左到右
层次遍历(LevelOrder)就是默认为自上而下,从左到右,一层一层进行遍历,
层次遍历需要借助队列来完成,
队列:先进先出(FIFO)。
分析:如图有一棵二叉树,按照层次遍历最终的结果就是ABCDEFG,首先将根结点A入队列。
然后根结点出队,并访问A结点,发现A结点既有左孩子也有右孩子,那么就分别将左右孩子入队,此时队列中有BC。
A的左右孩子都入队了,然后将队头结点B出队并访问,此时序列为AB,B有左右孩子,所以将B的左右孩子DE入队,队中此时有CDE。
然后队头结点C出队并访问,C有左右孩子,所以将C的左右孩子FG入队。此时队列里有DEFG。
然后队头结点D出队并访问,D没有左右孩子,所以没有可入队的结点。
继续让队头结点E出队并访问,E没有左右孩子,所以没有可入队的结点。
FG同理,此时队列为空,结束。最终层次遍历序列为:ABCDEFG。
算法思想:层次遍历使用一个队列(先进先出),将根结点入队,出队,然后访问出队结点,若它有左孩子,就将左孩子入队,若它有右孩子,就将右孩子入队,然后访问队头结点,如此循环下去,直到队列为空,就结束了。
代码:
void LevelOrder(BiTree T){ // 全篇❤
InitQueue(Q); // 初始化队列Q,队列通常用Q表示,栈用S表示
BiTree *p;
EnQueue(Q,T); // 将根结点入队
while(!IsEmpty(Q)){ // 队列不为空则进入循环
DeQueue(Q,p); // 出队,即将队头结点出队,因为队列先进先出
visit(p); // 并访问,即加入到最终遍历序列中
if(p->lchild!=NULL) // 如果有左孩子
EnQueue(Q,p->lchild); // 就将左孩子入队
if(p->rchild!=NULL) // 如果有右孩子
EnQueue(Q,p->rchild); // 就将右孩子入队
}
}
注解:
这篇好文章是转载于:学新通技术网
- 版权申明: 本站部分内容来自互联网,仅供学习及演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,请提供相关证据及您的身份证明,我们将在收到邮件后48小时内删除。
- 本站站名: 学新通技术网
- 本文地址: /boutique/detail/tanhgggcif
系列文章
更多
-
photoshop保存的图片太大微信发不了怎么办
PHP中文网 06-15 -
《学习通》视频自动暂停处理方法
HelloWorld317 07-05 -
Android 11 保存文件到外部存储,并分享文件
Luke 10-12 -
word里面弄一个表格后上面的标题会跑到下面怎么办
PHP中文网 06-20 -
photoshop扩展功能面板显示灰色怎么办
PHP中文网 06-14 -
微信公众号没有声音提示怎么办
PHP中文网 03-31 -
excel下划线不显示怎么办
PHP中文网 06-23 -
excel打印预览压线压字怎么办
PHP中文网 06-22 -
怎样阻止微信小程序自动打开
PHP中文网 06-13 -
TikTok加速器哪个好免费的TK加速器推荐
TK小达人 10-01