LeetCode 102.二叉树的层序遍历
题目:
二叉树的层序遍历。
给你二叉树的根节点 root ,返回其节点值的 层序遍历 。 (即逐层地,从左到右访问所有节点)。
示例 1:
输入:root = [3,9,20,null,null,15,7]
输出:[[3],[9,20],[15,7]]
示例 2:
输入:root = [1]
输出:[[1]]
思路:
- 层序遍历,从最上层到最下层,可以用BFS。
- 把树的每一层当前节点的左子节点、右子节点,放入到队列中。
- 队列Queue 的初始化,可以用 ArrayList 或者 LinkedList。
- 入列用 add/ offer, 出列用 poll 。
代码:
public List<List<Integer>> levelOrder(TreeNode root) {
List<List<Integer>> resultList = new ArrayList<>();
if (root==null) {
return resultList;
}
//队列的泛型用TreeNode
Queue<TreeNode> queue = new LinkedList<>();
queue.add(root);
//遍历队列
while (!queue.isEmpty()) {
//此处有坑,一定要先把每一层的数量记录下来,不然队列的长度发生变化,遍历次数不一样
int n=queue.size();
//层序遍历,从最上层到最下层,可以用BFS,把每一层的节点放到list里面。
//每一层都有一个list
List<Integer> list = new ArrayList<>();
for (int i=0;i<n;i++) {
//用poll拿出队列的节点
TreeNode node = queue.poll();
list.add(node.val);
//把当前节点的左子节点、右子节点,放入到队列中。
if (node.left!=null) {
queue.add(node.left);
}
if (node.right!=null) {
queue.add(node.right);
}
}
resultList.add(list);
}
return resultList;
}
}
浙公网安备 33010602011771号