写算法—二叉树的层序遍历
前言
一周又过半,今天带来的分享是二叉树的层序遍历题解,在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;}
结语
本次的分享到这里就结束了,祝大家周三早上好。
