1.前言
在二叉树的中,二叉树的遍历中有前序遍历、中序遍历、后序遍历和层序遍历。其中前序遍历、中序遍历和后序遍历都属于深度优先搜索(DFS),而层序遍历属于广度优先遍历(BFS)。
接下来为大家如何对二叉树进行层序遍历
2.层序遍历的遍历顺序
二叉树的层序遍历:https://leetcode.cn/problems/binary-tree-level-order-traversal/description/
示例:
层序遍历就是需要从根节点一层一层的往下遍历,每一层按照从左往右遍历。因此最后遍历得到的结果是3->9->20->15->7
3.图解+代码实现
层序遍历的核心思想是使用队列(Queue)这种数据结构。具体步骤如下:
首先,将根节点放入队列中。
然后,当队列不为空时,循环执行以下操作:
- 取出队列头部的节点。
- 访问该节点(例如,打印节点的值)。
- 如果该节点有左子节点,将左子节点放入队列。
- 如果该节点有右子节点,将右子节点放入队列。
- 重复步骤 2,直到队列为空,此时所有节点都已被访问。
图解如下所示:
代码实现如下:
public List<List<Integer>> levelOrder(TreeNode root) {
List<List<Integer>> res = new ArrayList<>();
// 判断根节点是否为空
if(root == null){
return res;
}
Queue<TreeNode> que = new LinkedList<>();
// 添加根节点
que.offer(root);
// 判断栈是否为空
while(!que.isEmpty()){
int len = que.size();// 保留栈的大小,可以得知本层节点的数量
List<Integer> path = new ArrayList<>();// 收集本层的结果
while(len > 0){
len--;
TreeNode node = que.poll();// 出栈
path.add(node.val);
// 判断左右节点是否为空
if(node.left != null){
que.offer(node.left);
}
if(node.right != null){
que.offer(node.right);
}
}
res.add(path);
}
return res;
}
运行结果:
二叉树还是比较实用的一种遍历方法,掌握层序遍历的原理和实现方法,对于深入理解二叉树以及解决相关算法问题具有重要意义。