Menu
CoddyTech

Top View of Binary Tree

你会得到一个按堆顺序存储在数组 root 中的二叉树:根节点位于索引 0,索引 i 的子节点位于 2*i+1(左侧)和 2*i+2(右侧),空位置用 -1 表示。

根节点位于第 0 列;左子节点比其父节点向左一列,右子节点比其父节点向右一列。从上方看,每列中最浅的节点;如果深度相同,则取它在该层从左到右排在最前面的节点(索引较小)。返回你看到的值,顺序从最左列到最右列。

函数

topView(root: integer-array) → integer-array
rootinteger-array
按堆的顺序排列树,空位用 -1 表示
返回值integer-array
从上方看到的每列的值,从最左侧列开始

约束条件

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

示例

输入
root = [5, 2, 9, 4, 7, 1, 6]
输出
[4, 2, 5, 9, 6]
解释
从左到右,各列分别是 4(第 -2 列)、2(第 -1 列)、根节点 5(第 0 列)、9(第 1 列)和 6(第 2 列)。7 和 1 也位于第 0 列,但根节点在它们上方。
challenge icon

进阶

使用节点对象而不是数组时,没有索引可以用来打破平局。你会如何说明平局规则?你的广度优先代码需要改动吗?

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

测试 #1

测试 #2

测试 #3

参数

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

预期输出

[4, 2, 5, 9, 6]