一、题目描述:
给你一个二叉树,请你返回其按 层序遍历 得到的节点值。 (即逐层地,从左到右访问所有节点)。
示例: 二叉树:[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 春招闯关活动」, 点击查看活动详情