Menu
CoddyTech

Vertical Order Traversal of a Binary Tree

二叉树按堆顺序存储在数组 root 中:根节点位于索引 0,索引 i 的子节点位于 2*i+1(左侧)和 2*i+2(右侧),-1 表示空位置,数组末尾可能还有多余的 -1 项。

根节点位于第 0 列;左子节点比其父节点向左一列,右子节点比其父节点向右一列。按从左到右的顺序,每列返回一个列表。在每列中,按从上到下的顺序列出节点;同一列、同一深度的节点按值从小到大排列。

函数

verticalTraversal(root: integer-array) → integer-2d-array
rootinteger-array
按堆顺序排列的树,空位用 -1 表示
返回值integer-2d-array
每列一个值列表,先从最左侧的列开始,每列从上到下

约束条件

  • 1 ≤ root.length ≤ 32767
  • 每个 root[i] 都是 -1,或满足 0 ≤ root[i] ≤ 5000 的值,并且没有重复值。
  • root[0] 永远不会是 -1,因此这棵树至少有一个节点。
  • 数组在最后一个节点之后可能还会有额外的 -1 项。
  • 空位置的两个子节点也都是空的,并且树最多有 14 层。

示例

输入
root = [5, 2, 9, 4, 7, 1, 6]
输出
[[4], [2], [5, 1, 7], [9], [6]]
解释
第 0 列存放根节点 5,再往下两层是 7 和 1。这两个节点的列和深度相同,因此 1 排在 7 前面,尽管 7 更靠左。
challenge icon

进阶

每个值都不超过 5000。你能利用这一点去掉比较排序,并在 O(n + 5000) 时间内完成吗?

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

测试 #1

测试 #2

测试 #3

参数

root = [5, 2, 9, 4, 7, 1, 6]

预期输出

[[4], [2], [5, 1, 7], [9], [6]]