vlambda博客
学习文章列表

写算法—二叉树的层序遍历

前言


    一周又过半,今天带来的分享是二叉树的层序遍历题解,在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; }

结语

    

    本次的分享到这里就结束了,祝大家周三早上好。