[LeetCode102. 二叉树的层序遍历] | 刷题打卡

239 阅读2分钟

一、题目描述:

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

示例: 二叉树:[3,9,20,null,null,15,7],

    3
   / \
  9  20
    /  \
   15   7

返回其层序遍历结果:

[
  [3],
  [9,20],
  [15,7]
]

二、思路分析:

层序遍历首先想到使用队列这个数据结构,根据题中要求的输出结果,需要输出一个二维数组,每行对应二叉树中每层的数据结构。这里在出队列的处理上稍微有点差别,在求二叉树深度的题中也讲到过,这里其实是自定向下每层的元素统一进队列,统一出队列,需要一个两层循环外加一个temp数组来做中间状态保存。

  • 时间复杂度:O(n)
  • 空间复杂度:O(n)

三、AC 代码:

class Solution {
    fun levelOrder(root: TreeNode?): List<List<Int>> {
        var result = mutableListOf<List<Int>>()
        if (root == null) {
            return result
        }
        var queue = LinkedList<TreeNode>()
        queue.push(root)
        var list = mutableListOf<TreeNode>()
        while (queue.isNotEmpty()) {
            list.addAll(queue)
            queue.clear()
            var level = mutableListOf<Int>()
            for (item in list) {
                level.add(item.`val`)
                if (item.left != null) {
                    queue.add(item.left!!)
                }
                if (item.right != null) {
                    queue.add(item.right!!)
                }
            }
            result.add(level)
            list.clear()
        }

        return result
    }
}

四、总结:

层序遍历分层遍历的模板代码可以解好多题,二叉树深度是其中一个,建议看下leetcode中类似的题解二叉树层序遍历登场:我要打十个!

  • 102.二叉树的层序遍历,本题
  • 107.二叉树的层次遍历II,本题result翻转下
  • 199.二叉树的右视图,本题模板,只保存没层最后一个节点
  • 637.二叉树的层平均值,本题模板,每层求评价
  • 429.N叉树的层序遍历,本题模板,遍历左右节点换成遍历所有子节点
  • 515.在每个树行中找最大值,本题模板,求行最大
  • 116.填充每个节点的下一个右侧节点指针,本题模板,让前一个节点指向本节点
  • 117.填充每个节点的下一个右侧节点指针II,同116

本文正在参与「掘金 2021 春招闯关活动」, 点击查看活动详情