二叉树遍历(循环+队列实现层序遍历)

上篇文章介绍了使用递归遍历二叉树的三种遍历方式,分别是,前序遍历,中序遍历,后序遍历,因为递归代码简单明了,所以只介绍了递归遍历,下面介绍下第四种遍历形式,层序遍历!我们使用循环加队列来做层序遍历

----------------------------------我是分割线------------------------------------

我们先定义一棵普通的二叉树,如下图

层序遍历:若树为空,则空操作返回,否则从树的第一层,根结点开始访问,从上而下逐层遍历,在同一层中,从左往右的顺序对结点进行访问

层序遍历的上面二叉树的结果为: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());
			}
		}
	}

其实思想很简单,代码注释已经表达了想法,从根结点开始,先放入队列,然后循环判断队列是否为空,非空,取出结点,打印数据域,并且依次将左孩子,右孩子放入队列,借助队列的特性,先进先出,来进行层序遍历,最后队列为空,循环停止,遍历结束

到这,文章就结束了!

以上,均为本人个人理解,比较简单的理解,或许跟各位看官理解的有出入,欢迎指正交流

欢迎转载,请注明出处跟作者,谢谢!

猜你喜欢

转载自my.oschina.net/u/2278977/blog/1538465