二叉树的层次遍历
要实现二叉树的层次遍历,需要借助队列实现,这种方法也称为宽度优先遍历(Breadth-First Search, BFS)。
主要思想是,借助队列,先将根结点入队,开启循环,队列为空的时候循环结束,每一个结点出队时,就把该结点的左右子节点(如果存在)放进队列。
public class Trees {
public static void main(String[] args) {
TreeNode root = new TreeNode(5);
TreeNode n4 = new TreeNode(4);
TreeNode n8 = new TreeNode(8);
TreeNode n11 = new TreeNode(11);
TreeNode n13 = new TreeNode(13);
TreeNode n3 = new TreeNode(3);
root.left = n4;
root.right = n8;
n4.left = n11;
n8.left = n13;
n8.right = n3;
ArrayList<Integer> list = printTree(root);
for (Integer integer : list) {
System.out.println(integer);
}
}
private static ArrayList<Integer> printTree(TreeNode root) {
// 使用队列(BFS)实现二叉树的层次遍历
ArrayList<Integer> list = new ArrayList<Integer>();// 存放层次遍历的结果序列
Queue<TreeNode> queue = new LinkedList<TreeNode>();// 辅助队列
if (root != null) {// 根结点入队
queue.offer(root);
}
while (!queue.isEmpty()) {// 队列不为空,执行循环
TreeNode node = queue.poll();
list.add(node.val);// 将队列元素输出
if (node.left != null) {// 如果该元素有左子结点,就把该子结点加入队列
queue.offer(node.left);
}
if (node.right != null) {// 如果该元素有右子结点,就把该子结点加入队列
queue.offer(node.right);
}
}
return list;
}
}
class TreeNode {
int val;
TreeNode left = null;
TreeNode right = null;
TreeNode(int val) {
this.val = val;
}
}