说到树的层次遍历,就应该提到广度优先搜索算法------广度优先搜索算法(Breadth-First-Search),又译作宽度优先搜索,或横向优先搜索,简称BFS,是一种图形搜索算法。

         可以说树层次遍历是广度优先遍历的一种直接应用吧,比较广度优先搜索是图形的一种搜索算法,图形是一种比较大的概念,但这个和深度优先齐名的算法,在树的层次遍历引用中,并没有那么复杂,或许是因为用在树的遍历,而非图吧。

SRE实战 互联网时代守护先锋,助力企业售后服务体系运筹帷幄!一键直达领取阿里云限量特价优惠。

 

       树的层次遍历,故名思议,在一棵树中,把节点从左往右,一层一层的,从上往下,遍历输出,这里要用到一种很重要的数据结构,队列。

          步骤如下:

       1.首先将根节点放入队列中。 
       2.当队列为非空时,循环执行步骤3到步骤5,否则执行6; 
       3.出队列取得一个结点,访问该结点; 
       4.若该结点的左子树为非空,则将该结点的左子树入队列; 
       5.若该结点的右子树为非空,则将该结点的右子树入队列; 
       6.结束。

import java.util.ArrayDeque;

class TreeNode {

	private TreeNode left = null;
	private TreeNode right = null;
	Integer val;

	public TreeNode(Integer val) {
		this.val = val;
	}

	public void setLeft(TreeNode node) {
		this.left = node;
	}

	public void setRight(TreeNode node) {
		this.right = node;
	}

	public static void BFSOrder(TreeNode node) {

		if (node == null) {
			return;
		}

		ArrayDeque<TreeNode> queue = new ArrayDeque<>();

		queue.add(node);

		while (!queue.isEmpty()) {

			// 一定要放判定之前,否则会出大事
			node = queue.poll();
			System.out.print(node.val + " ");
			if (node.left != null) {
				queue.add(node.left);
			}
			if (node.right != null) {
				queue.add(node.right);
			}

			// System.out.println(queue.poll().val + " ");
		}
	}
}

public class Solution {
	public static void main(String[] args) {
		TreeNode n1 = new TreeNode(1);
		TreeNode n2 = new TreeNode(2);
		TreeNode n3 = new TreeNode(3);
		TreeNode n4 = new TreeNode(4);
		TreeNode n5 = new TreeNode(5);
		TreeNode n6 = new TreeNode(6);
		TreeNode n7 = new TreeNode(7);

		n1.setLeft(n2);
		n1.setRight(n3);
		n2.setLeft(n4);
		n2.setRight(n5);
		n3.setLeft(n6);
		n4.setLeft(n7);

		TreeNode.BFSOrder(n1);
	}
}

  

扫码关注我们
微信号:SRE实战
拒绝背锅 运筹帷幄