前言
广度优先是一种横向的获取方式,先从树的较浅层开始获取节点,直接获取完同层次的所有页面后才进入下一层。层次遍历是广度优先遍历,层次遍历是二叉树按照从根节点到叶子节点的层次关系,一层一层横向遍历各个节点。
二叉树的节点定义
private static class TreeNode {
int data;
TreeNode leftChild;
TreeNode rightChild;
public TreeNode(int data) {
this.data = data;
}
}
层次遍历
思路
层次遍历的非递归借助了队列实现,队列的特点是先进先出。首先访问根节点并进队,队列不为空时出队并输出节点的值,如果当前出队节点有左孩子则左孩子先进队,如果有右孩子则右孩子后进队。
public static void levelOrderTraversal (TreeNode node) {
Queue<TreeNode> queue = new LinkedList<TreeNode>();
queue.offer(node);
while (!queue.isEmpty()) {
node = queue.poll();
System.out.print(node.data + " ");
if (node.leftChild != null) {
queue.offer(node.leftChild);
}
if (node.rightChild != null) {
queue.offer(node.rightChild);
}
}
}