写算法—二叉树的层序遍历
前言
一周又过半,今天带来的分享是二叉树的层序遍历题解,在leetcode题号为102。这道题的标签为广度遍历和二叉树,下面一起来看看具体的解决思路吧。
正文
题目:
给定你一个二叉树,请你返回其按层序遍历得到的节点值。(即逐层地从左到右访问所有节点),为了更好地说明题目的意思,我从原题目中截了图,如下:
解题思路:
1. 使用一个队列,利用队列的先进先出的特点,来分别获取每一层。
2. 边遍历每一层的节点,边把遍历到的节点的子节点分别放到队列尾部。
3. 遍历每一层时,为了确保能够准确把整一层遍历完再去遍历下一层,需先获取当前队列的长度。
解题代码:
public List<List<Integer>> levelOrder(TreeNode root) {
List<List<Integer>> result = new ArrayList<>();
if (root == null) {
return result;
}
Queue<TreeNode> queue = new LinkedList<>();
queue.offer(root);
while (!queue.isEmpty()) {
int size = queue.size();
List<Integer> line = new ArrayList<>();
for (int i = 0; i < size; i++) {
TreeNode node = queue.poll();
if (node == null) {
continue;
}
line.add(node.val);
TreeNode left = node.left;
if (left != null) {
queue.offer(left);
}
TreeNode right = node.right;
if (right != null) {
queue.offer(right);
}
}
result.add(line);
}
return result;
}
结语
本次的分享到这里就结束了,祝大家周三早上好。