一. 学习文章及资料
代码随想录 层序遍历 10
二. 学习内容
1. 二叉树的层序遍历
(1) 解题思路:
层序遍历一个二叉树。就是从左到右一层一层的去遍历二叉树。
需要借用一个辅助数据结构即队列来实现,
队列先进先出符合一层一层遍历的逻辑,而栈先进后出适合模拟深度优先遍历也就是递归的逻辑。
我们用size记录每一层节点数量,来达到控制队列弹出节点个数,在弹出节点同时把其子节点加入队列也就是下一层节点。我们把一层的每一个节点按顺序存入一维数组itemList,再将每一层的itemList存入二维数组,最后返回二维数组也就是所有节点
(2) 解题步骤:
- 初始化:若根节点非空,加入队列。
- 外层循环:队列非空时,处理当前层的所有节点。
- 内层循环:根据当前层的节点数(size)循环取出节点,记录值,并将子节点入队。
- 保存结果:每层处理完后,将该层的值列表加入结果列表。
class Solution {
public List<List<Integer>> levelOrder(TreeNode root) {
List<List<Integer>> resList=new ArrayList<>();
Queue<TreeNode> queue=new LinkedList<>();
if(root!=null) queue.offer(root);
while(!queue.isEmpty()){
List<Integer> itemList=new ArrayList<>();
int size=queue.size();
while(size-->0){
TreeNode node=queue.poll();
itemList.add(node.val);
if(node.left!=null) queue.offer(node.left);
if(node.right!=null) queue.offer(node.right);
}
resList.add(itemList);
}
return resList;
}
}
2. 二叉树的层序遍历 II
(1) 解题思路:
相对于102.二叉树的层序遍历,就是最后把result数组反转一下就可以了
class Solution {
p