这里只是演示一下怎么按照层序进行遍历,便于理解层序遍历(类似于图的宽度优先遍历),一层一层打印我后面会在别的文章介绍,图和代码都时手写,比较丑见谅
假设我们有一棵二叉树(为便于理解,这里我放了一棵满二叉树)
看图我们可以想到最后的结果应该为 1 2 3 4 5 6 7
算法:类似于图的宽度优先遍历,这里我们用一个队列。
1.先把头节点入队
2.如果队列不为空,弹出第一个节点,打印这个节点,并把它的非空孩子放到队列里(左不为空先放左)
3.重复2的过程,直到队列为空
对应上面的二叉树的处理过程如下:
可以看到我们打印的依次是1 2 3 4 5 6 7跟我们预期的结果一致
代码实现如下:
package dataStructure.binaryTree;
import dataStructure.TreeNode;
import java.util.LinkedList;
import java.util.Queue;
public class PrintLevelOrder {
public static void main(String[] args) {
TreeNode t1 = new TreeNode(1);
TreeNode t2 = new TreeNode(2);
TreeNode t3 = new TreeNode(3);
TreeNode t4 = new TreeNode(4);
TreeNode t5 = new TreeNode(5);
TreeNode t6 = new TreeNode(6);
TreeNode t7 = new TreeNode(7);
t1.left = t2;
t1.right = t3;
t2.left = t4;
t2.right = t5;
t3.left = t6;
t3.right = t7;
printLevelOrder(t1);
}
public static void printLevelOrder(TreeNode head) {
if(head == null) {
return;
}
Queue<TreeNode> queue = new LinkedList<>();
queue.add(head);
while(!queue.isEmpty()) {
TreeNode curNode = queue.poll();
System.out.println(curNode.value);
if(curNode.left != null) {
queue.add(curNode.left);
}
if(curNode.right != null) {
queue.add(curNode.right);
}
}
}
}
代码比较简单,我就不写注释了,有疑问请评论或私信我