参加了 kkb 的门徒培训,想要记录下自己的成长过程。每天一篇,坚持不断更(补) --- 2022.4.3
题目描述
给你二叉树的根节点 root ,返回其节点值的 锯齿形层序遍历 。(即先从左往右,再从右往左进行下一层遍历,以此类推,层与层之间交替进行)。
示例 1:
输入: root = [3,9,20,null,null,15,7]
输出: [[3],[20,9],[15,7]]
示例 2:
输入: root = [1]
输出: [[1]]
示例 3:
输入: root = []
输出: []
提示:
- 树中节点数目在范围
[0, 2000]内 -100 <= Node.val <= 100
解题思路
与 LeetCode 102.二叉树的层序遍历 类似,反转下偶数层
/**
* Definition for a binary tree node.
* function TreeNode(val, left, right) {
* this.val = (val===undefined ? 0 : val)
* this.left = (left===undefined ? null : left)
* this.right = (right===undefined ? null : right)
* }
*/
/**
* @param {TreeNode} root
* @return {number[][]}
*/
var zigzagLevelOrder = function(root) {
const ans = [];
if (!root) return ans;
// 用于保存未计算的叶子节点
const q = [];
// 添加根节点
q.push(root);
while (q.length) {
// 返回当前层的遍历结果
const an = [];
// 由于 q 长度会变,所以需要提前记录
const len = q.length;
for (let i = 0; i < len; i++) {
const node = q.shift();
an.push(node.val);
node.left && q.push(node.left);
node.right && q.push(node.right);
}
ans.push(an);
}
ans.forEach((item, i) => {
item = i % 2 ? item.reverse() : item;
})
return ans;
};