上篇文章介绍了使用递归遍历二叉树的三种遍历方式,分别是,前序遍历,中序遍历,后序遍历,由于递归代码简单明了,因此只介绍了递归遍历,下面介绍下第四种遍历形式,层序遍历!咱们使用循环加队列来作层序遍历
----------------------------------我是分割线------------------------------------java
咱们先定义一棵普通的二叉树,以下图
层序遍历:若树为空,则空操做返回,不然从树的第一层,根结点开始访问,从上而下逐层遍历,在同一层中,从左往右的顺序对结点进行访问node
层序遍历的上面二叉树的结果为:ABCDEFGHIJKspa
JAVA代码以下:code
//层序遍历 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()); } } }
其实思想很简单,代码注释已经表达了想法,从根结点开始,先放入队列,而后循环判断队列是否为空,非空,取出结点,打印数据域,而且依次将左孩子,右孩子放入队列,借助队列的特性,先进先出,来进行层序遍历,最后队列为空,循环中止,遍历结束递归
到这,文章就结束了!队列
以上,均为本人我的理解,比较简单的理解,或许跟各位看官理解的有出入,欢迎指正交流get
欢迎转载,请注明出处跟做者,谢谢!class