AcWing 45. 之字形打印二叉树-JavaScript
原题链接
中等
作者:
semicloud
,
2024-02-13 16:54:00
,
所有人可见
,
阅读 28
function TreeNode(val) {
this.val = val;
this.left = this.right = this.level = null;
}
/**
* @param {TreeNode} root
* @return {number[][]}
*/
var printFromTopToBottom = function(root) {
if (!root) return [];
root.level = 1;
const queue = [root];
const map = new Map();
// level为偶数时,调用 unshift 方法,为奇数时调用 push 方法
const funcMap = new Map([
[0, Array.prototype.unshift], [1, Array.prototype.push],
]);
while (queue.length) {
const cur = queue.shift();
if (map.get(cur.level))
funcMap.get(cur.level % 2).call(map.get(cur.level), cur.val);
else
map.set(cur.level, [cur.val]);
if (cur.left) {
cur.left.level = cur.level + 1;
queue.push(cur.left);
}
if (cur.right) {
cur.right.level = cur.level + 1;
queue.push(cur.right);
}
}
const res = [];
for (const level of [...map.keys()].sort((x, y) => x - y)) {
res.push(map.get(level));
}
return res;
};