一、题目
二叉树的层序遍历。

二、思路
1)先处理特殊情况,root==null
2)使用一个队列,先加入根节点root,用队列的长度控制循环。
3)每次循环新创建一个list(新的一层),通过长度n控制for循环。
4)弹出队列中的节点,将对应的值加入list,并将其左右子节点加入queue。
三、代码
class Solution {
public List<List<Integer>> levelOrder(TreeNode root) {
if(root == null) return new ArrayList<>();
List<List<Integer>> res = new ArrayList<>();
Queue<TreeNode> queue = new LinkedList<>();
queue.offer(root);
while(!queue.size().isEmpty){
List<Integer> list = new ArrayList<>();
int n = queue.size();
for(int i = 0;i<n;i++){
TreeNode node = queue.poll();
list.add(node.val);
if(node.left != null) queue.offer(node.left);
if(node.right != null) queue.offer(node.right);
}
res.add(list);
}
return res;
}
}
四、语法
1、Queue<TreeNode> queue = new LinkedList<>(); 声明Queue类型的引用变量queue,并用LinkedList实例化。
LinkedList 实现了 Queue 接口,支持高效的 尾进头出 操作(O(1))
2、queue.offer(root); 将元素加入队列尾部,入队
等价于queue.add(root);
3、queue.poll(); 从队列头部移除并返回元素,出队
队列为空时,返回null