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

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

 

 

----------------------------------我是分割线------------------------------------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

相关文章
相关标签/搜索