1.定义一个队列,并将根结点入队列
2.从队列中取出结点输出,如果该结点有子结点,则按左右顺序将子节点如队列
3.循环步骤2,直到队列为空
package me.wcy.j2se.datastructure;
import java.util.LinkedList;
import java.util.Queue;
/**
* 层序遍历二叉树
*/
public class LayerTranverse {
public static void main(String[] args) {
TreeNode root = new TreeNode(1);
TreeNode node2 = new TreeNode(2);
TreeNode node3 = new TreeNode(3);
TreeNode node4 = new TreeNode(4);
TreeNode node5 = new TreeNode(5);
TreeNode node6 = new TreeNode(6);
TreeNode node7 = new TreeNode(7);
root.left = node2;
root.right = node3;
node2.left = node4;
node2.right = node5;
node3.left = node6;
node3.right = node7;
layerTranverse(root);
}
public static void layerTranverse(TreeNode root) {
Queue<TreeNode> nodes = new LinkedList<>();
nodes.add(root);
int toBePrinted = 1;
int nextLevel = 0;
while (nodes.size() > 0) {
TreeNode temp = nodes.poll();
System.out.print(temp.data + " ");
if (temp.left != null) {
nodes.add(temp.left);
nextLevel++;
}
if (temp.right != null) {
nodes.add(temp.right);
nextLevel++;
}
toBePrinted--;
if (toBePrinted == 0) {
System.out.print("\n");
toBePrinted = nextLevel;
nextLevel = 0;
}
}
}
}
输出结果:
1
2 3
4 5 6 7