剑指 Offer 32-II. 从上到下打印二叉树II
b站视频
题目介绍
从上到下按层打印二叉树,同一层的节点按从左到右的顺序打印,每一层打印到一行。
例如:
给定二叉树: [3,9,20,null,null,15,7],
3
/ \
9 20
/ \
15 7
返回其层次遍历结果:
[
[3],
[9,20],
[15,7]
]
提示:
节点总数 <= 1000
解题思路
本题比较简单,使用递归,每次递归的时候我们传入当前的节点、当前节点所在的层数、以及存放最后结果的数组
解题步骤:
- 判断是不是一棵空树,如果是空树,则直接返回
[] - 定义当前的层数
k,从0开始,即根节点是第0层,定义存放最后结果的数组ans - 如果数组下标为
k的位置是undefined,那么将一个空数组放到这个位置,否则往ans[k]的数组中插入当前的值 - 如果有左节点,则递归遍历左节点,如果有有右节点,则递归遍历右节点
- 重复 3-4 的步骤,直到遍历完整棵树,将
ans数组返回
解题代码
var levelOrder = function(root) {
// 如果是空树,则返回 []
if (!root) return []
let k = 0
const ans = []
// 根节点所在的层数为 0
return _levelOrder(root, k, ans)
};
var _levelOrder = function(root, k, ans) {
// 如果数组的第 k 个位置没有值,则放置一个 []
if (!ans[k]) ans[k] = []
// 往数组第 k 个位置的数组插入当前节点的值
ans[k].push(root.val)
// 如果有左节点则递归遍历左子树
root.left && _levelOrder(root.left, k + 1, ans)
// 如果有右节点则递归遍历右子树
root.right && _levelOrder(root.right, k + 1, ans)
// 返回最后的结果数组
return ans
}