剑指 Offer 32 - III. 从上到下打印二叉树 III - 力扣(LeetCode)
文章起笔:2021年11月14日14:01:54
问题描述及示例
请实现一个函数按照之字形顺序打印二叉树,即第一行按照从左到右的顺序打印,第二层按照从右到左的顺序打印,第三行再按照从左到右的顺序打印,其他行以此类推。
给定二叉树 [3,9,20,null,null,15,7],
3
/ \
9 20
/ \
15 7
返回其层次遍历结果:
[
[3],
[20,9],
[15,7]
]
提示:
节点总数 <= 1000
我的题解(层序遍历;BFS)
本题也是普通的二叉树层序遍历的一种变形。有关普通层序遍历的解释可以参看下方博客:
参考:【算法-LeetCode】102. 二叉树的层序遍历(二叉树;层序遍历;BFS;生成二叉树)_赖念安的博客-CSDN博客
其实之前做过一道『【算法-LeetCode】103. 二叉树的锯齿形层序遍历』和本题其实是一样的思路:
参考:【算法-LeetCode】103. 二叉树的锯齿形层序遍历(二叉树;层序遍历;BFS)_赖念安的博客-CSDN博客
所以本题就不再赘述过程了。
/**
* Definition for a binary tree node.
* function TreeNode(val) {
* this.val = val;
* this.left = this.right = null;
* }
*/
/**
* @param {TreeNode} root
* @return {number[][]}
*/
var levelOrder = function(root) {
if(!root) {
return [];
}
let result = [];
let queue = [root];
let depth = 1;
while(queue.length) {
let level = [];
for(let i = 0, len = queue.length; i < len; i++) {
let node = queue.shift();
level.push(node.val);
if(node.left) {
queue.push(node.left);
}
if(node.right) {
queue.push(node.right);
}
}
// 注意关注这里和普通层序遍历的不同点
level = depth % 2 ? level : level.reverse();
result.push(level);
depth++;
}
return result;
};
提交记录
执行结果:通过
34 / 34 个通过测试用例
执行用时:72 ms, 在所有 JavaScript 提交中击败了78.92%的用户
内存消耗:39.3 MB, 在所有 JavaScript 提交中击败了93.15%的用户
时间:2021/11/14 14:05
官方题解
更新:2021年7月29日18:43:21
因为我考虑到著作权归属问题,所以【官方题解】部分我不再粘贴具体的代码了,可到下方的链接中查看。
【更新结束】
更新:2021年11月14日14:06:28
参考:【算法-LeetCode】103. 二叉树的锯齿形层序遍历(二叉树;层序遍历;BFS)_赖念安的博客-CSDN博客
注意,以上为【官方精选题解】。
【更新结束】
有关参考
更新:2021年11月14日14:06:20
参考:【算法-LeetCode】102. 二叉树的层序遍历(二叉树;层序遍历;BFS;生成二叉树)_赖念安的博客-CSDN博客
参考:【算法-LeetCode】103. 二叉树的锯齿形层序遍历(二叉树;层序遍历;BFS)_赖念安的博客-CSDN博客