102. 二叉树的层序遍历
给你一个二叉树,请你返回其按 层序遍历 得到的节点值。 (即逐层地,从左到右访问所有节点)。
示例:
二叉树:[3,9,20,null,null,15,7]
,
3
/ \
9 20
/ \
15 7
返回其层序遍历结果:
[
[3],
[9,20],
[15,7]
]
class Solution {
public List<List<Integer>> levelOrder(TreeNode root) {
List<List<Integer>> arrayLists = new ArrayList<>();
if (root == null){
return arrayLists;
}
/**
* 使用队列记录
* 有关LinkedList 双向链表
* LinkedList是通过双向链表实现的
* 1、add()和offer()区别:
* add()和offer()都是向队列中添加一个元素。一些队列有大小限制,因此如果想在一个满的队列中加入一个新项,
* 调用 add() 方法就会抛出一个 unchecked 异常,而调用 offer() 方法会返回 false。因此就可以在程序中进行有效的判断!
* 2、poll()和remove()区别:
* remove() 和 poll() 方法都是从队列中删除第一个元素。如果队列元素为空,
* 调用remove() 的行为与 Collection 接口的版本相似会抛出异常,但是新的 poll() 方法在用空集合调用时只是返回 null。因此新的方法更适合容易出现异常条件的情况。
* 3、element() 和 peek() 区别:
* element() 和 peek() 用于在队列的头部查询元素。与 remove() 方法类似,在队列为空时, element() 抛出一个异常,而 peek() 返回 null。
*/
Queue<TreeNode> queue = new LinkedList<>();
queue.offer(root);
while (!queue.isEmpty()){
ArrayList<Integer> integer = new ArrayList<>();
/**
*记录需要删除的队列数量
* 每一层的数量,依次记录
*/
int size = queue.size();
for (TreeNode treeNode : queue) {
integer.add(treeNode.val);
}
arrayLists.add(integer);
for (int i = 0; i < size; i++) {
TreeNode poll = queue.poll();
if (poll.left!=null){
queue.offer(poll.left);
}
if (poll.right!=null){
queue.offer(poll.right);
}
}
}
return arrayLists;
}
}