二叉树层序遍历

举报
兔老大 发表于 2021/04/26 00:10:06 2021/04/26
【摘要】 层序遍历序列为:ABCDEFG 思路:栈是先进后出的数据结构,而队列是先进先出的数据结构。 我们层序遍历,很明显,先遇到的节点先打印,不同于前中后序遍历,我们采用队列结构。   具体执行过程如下: 1、初始化——放入根节点 2、检查队列是否为空,如果是空则遍历完成 3、队列弹出元素,并打印 4、把弹出的元素的左孩子(如果存在的话)和右孩子(如果存...

层序遍历序列为:ABCDEFG

思路:栈是先进后出的数据结构,而队列是先进先出的数据结构。

我们层序遍历,很明显,先遇到的节点先打印,不同于前中后序遍历,我们采用队列结构。

 

具体执行过程如下:

1、初始化——放入根节点

2、检查队列是否为空,如果是空则遍历完成

3、队列弹出元素,并打印

4、把弹出的元素的左孩子(如果存在的话)和右孩子(如果存在的话)放入队列。

5、重复2、3、4步。

 

下面是实现代码,按照思路实现即可。


  
  1. public void levelOrder() {
  2. Node<E> node =root;//根
  3. LinkedList<Node<E>> list = new LinkedList<>();//队列
  4. list.add(node);//放入根
  5. while(!list.isEmpty()) {
  6. node=list.poll();
  7. System.out.print(node.data);
  8. if(node.lchild!=null)
  9. list.offer(node.lchild);
  10. if(node.rchild!=null)
  11. list.offer(node.rchild);
  12. }
  13. }

我们通过图来看一下实际的过程。

1、放入根节点

接下来循环执行2、3、4步:

2、检查队列不为空;

3、打印A;弹出

4、放入左右孩子B、C

继续循环执行2、3、4步:

2、检查队列不为空;

3、打印B;弹出

4、放入左右孩子D、E

继续循环执行2、3、4步:

2、检查队列不为空;

3、打印C;弹出

4、放入左右孩子F、G

 

最后四个一次弹出,不再压入,因为他们的孩子都是空。

遍历完成

 

文章来源: fantianzuo.blog.csdn.net,作者:兔老大RabbitMQ,版权归原作者所有,如需转载,请联系作者。

原文链接:fantianzuo.blog.csdn.net/article/details/102454497

【版权声明】本文为华为云社区用户转载文章,如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。