提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档
题目描述
二叉树的层序遍历
解题过程
解题思路
利用队列的先进先出原则,将每层的节点依次入队。再用一个循环遍历队列中的每一个节点,取其值放进List列表。
1、创建保存最终结果的res列表;
2、创建FIFO的队列,并将根节点入队;
3、while循环,循环结束的条件是队列为空;
4、while循环中,创建list列表用于保存一层遍历的结果;
5、while循环中,计算当前队列中的元素个数size;
6、while循环中,用一个for循环遍历size大小的队列,每一个被遍历到的节点,将其值保存在list中,同时查看该节点是否存在左、右子节点,若存在则入队,入队顺序是先左后右;
7、for循环结束则将结果保存在res列表中;
8、while循环结束,返回res;
代码如下:
/**
* Definition for a binary tree node.
* public class TreeNode {
* int val;
* TreeNode left;
* TreeNode right;
* TreeNode(int x) { val = x; }
* }
*/
class Solution {
public List<List<Integer>> levelOrder(TreeNode root) {
if(root == null){
return new ArrayList<List<Integer>>();
}
Queue<TreeNode> queue = new LinkedList<>();
List<List<Integer>> res = new ArrayList<>();
queue.offer(root);
while(!queue.isEmpty()){
int queueSize = queue.size();
List<Integer> list = new ArrayList<>();
//遍历上一个队列的所有元素
for(int i = 0; i < queueSize; i ++){
TreeNode node = queue.poll();
//取出队列元素,将其val保存到list列表中,同时将其子节点(若存在)按顺序入队(左、右)
list.add(node.val);
if(node.left != null){
queue.offer(node.left);
}
if(node.right != null){
queue.offer(node.right);
}
}
//一层的所有节点都遍历完成,则将该行的遍历结果保存在res列表中
res.add(list);
}
//循环结束,将res返回
return res;
}
}
总结
暂时没有总结,待续。。。