上篇文章介绍了使用递归遍历二叉树的三种遍历方式,分别是,前序遍历,中序遍历,后序遍历,因为递归代码简单明了,所以只介绍了递归遍历,下面介绍下第四种遍历形式,层序遍历!我们使用循环加队列来做层序遍历
----------------------------------我是分割线------------------------------------
我们先定义一棵普通的二叉树,如下图
层序遍历:若树为空,则空操作返回,否则从树的第一层,根结点开始访问,从上而下逐层遍历,在同一层中,从左往右的顺序对结点进行访问
层序遍历的上面二叉树的结果为:ABCDEFGHIJK
JAVA代码如下:
//层序遍历 public static void levelOrder(Node node){ //如果结点为空,返回 if(node==null){ return; } //创建一个队列 Queue<Node> queue = new LinkedList<>(); //将根结点放入队列 queue.add(node); /** * 循环判断队列是否为空, * 如果非空,将结点的左右孩子放入队列,并且取出data域的数据 * 为空的话,结束遍历 */ while (!queue.isEmpty()){ //取出结点 Node poll = queue.poll(); //打印结点信息 System.out.println(poll.getData()); //如果当前结点的左孩子不为空,放入队列 if(poll.getLeft()!=null){ queue.add(poll.getLeft()); } //如果当前结点的又孩子不为空,放入队列 if(poll.getRight()!=null){ queue.add(poll.getRight()); } } }
其实思想很简单,代码注释已经表达了想法,从根结点开始,先放入队列,然后循环判断队列是否为空,非空,取出结点,打印数据域,并且依次将左孩子,右孩子放入队列,借助队列的特性,先进先出,来进行层序遍历,最后队列为空,循环停止,遍历结束
到这,文章就结束了!
以上,均为本人个人理解,比较简单的理解,或许跟各位看官理解的有出入,欢迎指正交流
欢迎转载,请注明出处跟作者,谢谢!