Menu
CoddyTech

Binary Tree Zigzag Level Order Traversal

你会得到一个以数组形式存储的二叉树 root。根节点位于索引 0,索引 i 的子节点位于 2*i+1(左侧)和 2*i+2(右侧),-1 表示空位置,数组末尾可能还有多余的 -1 项。

按层以锯齿顺序返回节点值:根节点所在层从左到右,下一层从右到左,依此交替,直到最深的一层。这也称为螺旋层序遍历。

函数

zigzagLevelOrder(root: integer-array) → integer-2d-array
rootinteger-array
按堆顺序排列的树,空位置用 -1 表示
返回值integer-2d-array
每个层级对应一个值列表,先从顶层开始,方向交替为从左到右和从右到左

约束条件

  • 1 ≤ root.length ≤ 32767
  • 每个 root[i] 都是 -1,或者是满足 0 ≤ root[i] ≤ 104 的值。
  • 节点值各不相同。
  • root[0] 永远不会是 -1,所以这棵树至少有一个节点。
  • 数组可能会在最后一个节点之后包含额外的 -1 项。
  • 空位置的两个子节点也都是空的,并且这棵树最多有 14 层。

示例

输入
root = [8, 12, 5, 1, 9, -1, 14, -1, -1, 4, 2, -1, -1, 11]
输出
[[8], [5, 12], [1, 9, 14], [11, 2, 4]]
解释
从左向右读取,各层级为 8;12, 5;1, 9, 14;4, 2, 11。第 1 层和第 3 层的顺序相反:[5, 12] 和 [11, 2, 4]。
challenge icon

进阶

你能把每个值直接放到所在行的最终位置,而不进行反转,也不使用第二个栈吗?

重置代码
def zigzagLevelOrder(root):
    # 在这里编写代码

测试 #1

测试 #2

测试 #3

参数

root = [8, 12, 5, 1, 9, -1, 14, -1, -1, 4, 2, -1, -1, 11]

预期输出

[[8], [5, 12], [1, 9, 14], [11, 2, 4]]