52 lines
1.6 KiB
JavaScript
52 lines
1.6 KiB
JavaScript
/**
|
||
* 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[][]}
|
||
* https://leetcode.cn/problems/binary-tree-zigzag-level-order-traversal/?envType=study-plan-v2&envId=top-interview-150
|
||
*/
|
||
const zigzagLevelOrder = function (root) {
|
||
|
||
};
|
||
|
||
/*
|
||
这个题目就是102的变种,只需记录一个遍历,order,如果order为true就从左到右,否则从右到左,这里直接复制102的代码
|
||
*/
|
||
|
||
function f1(root) {
|
||
if (!root) return []; // 如果树为空,返回空数组
|
||
|
||
const result = []; // 用于存储每一层的节点值
|
||
const queue = [root]; // 初始化队列,开始时只有根节点
|
||
|
||
let order = true; // 判断这一层数据是从左到右还是从右到左
|
||
|
||
while (queue.length > 0) {
|
||
const levelSize = queue.length; // 当前层的节点数
|
||
const levelValues = []; // 存储当前层节点的值
|
||
|
||
// 遍历当前层的所有节点
|
||
for (let i = 0; i < levelSize; i++) {
|
||
const node = queue.shift(); // 弹出队列中的第一个节点
|
||
levelValues.push(node.val); // 将节点值加入当前层的结果
|
||
|
||
// 如果节点有左子节点,加入队列
|
||
if (node.left) queue.push(node.left);
|
||
// 如果节点有右子节点,加入队列
|
||
if (node.right) queue.push(node.right);
|
||
}
|
||
|
||
// 将当前层的节点值加入最终结果
|
||
result.push(order ? levelValues : levelSize.reverse());
|
||
order = !order;
|
||
}
|
||
|
||
return result;
|
||
}
|