leetcode刷题(剑指offer) 102.二叉树的层序遍历

102.二叉树的层序遍历

给你二叉树的根节点 root ,返回其节点值的 层序遍历 。 (即逐层地,从左到右访问所有节点)。

示例 1:

输入:root = [3,9,20,null,null,15,7]
输出:[[3],[9,20],[15,7]]

示例 2:

输入:root = [1]
输出:[[1]]

示例 3:

输入:root = []
输出:[]

提示:

  • 树中节点数目在范围 [0, 2000]
  • -1000 <= Node.val <= 1000

本题是要层级遍历二叉树,将每层的所有节点都存入到list中。主要存在两个需要解决的点。

  • 如何层级遍历二叉树
  • 如何知道每层有哪些节点

接替围绕着这两个点,首先可以使用队列来层级遍历每个节点,思路类似于宽度优先搜索(bfs),先将root节点放入队列中,每次都弹出队头节点,取出节点,然后将取出节点的left节点和right节点依次放入到队列中,直到没有节点再能放入到队列中为止(即:队列为空)。

随后再此基础上,创建变量lastNode表示为当前层的最后一个节点,nextLastNode表示为下一层的最后一个节点,这个变量每次从队列中取出节点都会进行更新,当弹出节点等于lastNode时,即可将一层的list存入总的list,且将lastNode更新为nextLastNode

代码实现如下:

public static List<List<Integer>> levelOrder(TreeNode root) {
   
    if (root == null) {
   
        return new ArrayList<>();
    }
    List<List<Integer>> res = new ArrayList<>();
    TreeNode lastNode = root;
    TreeNode nextLastNode = null;
    Queue<TreeNode> queue = new ArrayDeque<>();
    List<Integer> list = new ArrayList<>();
    queue.add(root);
    while (!queue.isEmpty()) {
   
        TreeNode node = queue.poll();
        list.add(node.val);
        if (node.left != null) {
   
            nextLastNode = node.left;
            queue.add(node.left);
        }
        if (node.right != null) {
   
            nextLastNode = node.right;
            queue.add(node.right);
        }
        if (lastNode == node) {
   
            res.add(list);
            list = new ArrayList<>();
            lastNode = nextLastNode;
        }

    }
    return res;
}

相关推荐

  1. LeetCode100】【

    2024-02-07 12:34:01       42 阅读
  2. leetcode 102.

    2024-02-07 12:34:01       48 阅读

最近更新

  1. docker php8.1+nginx base 镜像 dockerfile 配置

    2024-02-07 12:34:01       94 阅读
  2. Could not load dynamic library ‘cudart64_100.dll‘

    2024-02-07 12:34:01       100 阅读
  3. 在Django里面运行非项目文件

    2024-02-07 12:34:01       82 阅读
  4. Python语言-面向对象

    2024-02-07 12:34:01       91 阅读

热门阅读

  1. 87.Go Redis实现可重入、自动续期分布式锁

    2024-02-07 12:34:01       60 阅读
  2. Makefile 和 Bash 脚本之间区别和联系

    2024-02-07 12:34:01       51 阅读
  3. Python面试题1-6

    2024-02-07 12:34:01       44 阅读
  4. Bug地狱 #1 突然宕机,企业级应用到底怎么了

    2024-02-07 12:34:01       52 阅读
  5. home work day5

    2024-02-07 12:34:01       50 阅读
  6. 2024/2/6

    2024-02-07 12:34:01       49 阅读
  7. 计算机网络相关题目及答案(第四章)

    2024-02-07 12:34:01       56 阅读
  8. win11安装mysql8.3.0压缩包版 240206

    2024-02-07 12:34:01       54 阅读
  9. 拼音笔记笔记

    2024-02-07 12:34:01       52 阅读
  10. 什么是大模型

    2024-02-07 12:34:01       47 阅读
  11. #P12365. 相逢是首歌

    2024-02-07 12:34:01       43 阅读
  12. SQL--DQL

    SQL--DQL

    2024-02-07 12:34:01      38 阅读