Menu
CoddyTech

Left View of Binary Tree

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

站在树的左侧。在每一层,你都能看到一个节点,也就是最左侧的节点;这一层的其余节点都被它挡住了。按从顶层到底层的顺序,返回你能看到的节点值。

函数

leftView(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 = [3, 8, 5, -1, -1, -1, 6, -1, -1, -1, -1, -1, -1, 1]
输出
[3, 8, 6, 1]
解释
8 是一个叶节点,所以第三层和第四层只包含 6(索引 6)和 1(索引 13),它们都位于右子节点 5 下面。你仍然能看到它们:[3, 8, 6, 1]。
challenge icon

进阶

层级 d 填充索引 2^d-1 到 2^(d+1)-2。你能通过扫描这些范围来构建视图,而不使用队列或递归吗?在填充后的数组上,这样做的成本是多少?

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

测试 #1

测试 #2

测试 #3

参数

root = [3, 8, 5, -1, -1, -1, 6, -1, -1, -1, -1, -1, -1, 1]

预期输出

[3, 8, 6, 1]