Menu
CoddyTech

Boundary Traversal of Binary Tree

中等树的遍历python iconjava iconcpp iconc iconjs icon+10

数组 root 按层序存储一棵二叉树:根节点位于索引 0,索引 i 的子节点位于 2i+1(左)和 2i+2(右),空位置用 -1 表示,末尾还可能有多余的 -1。叶节点是没有子节点的节点。

按逆时针顺序返回边界:

  1. 根节点。
  2. 左边界,从上到下:从根节点的左子节点开始,如果有左子节点就向左走,否则向右走。遇到叶节点前停止。
  3. 所有叶节点,从左到右。
  4. 右边界,从下到上:与左边界镜像对称,从根节点的右子节点开始。

每个节点只列出一次,因此只有一个节点的树只返回根节点。

函数

boundaryTraversal(root: integer-array) → integer-array
rootinteger-array
按层序遍历二叉树,空位置用 -1 表示
返回值integer-array
从根节点开始,逆时针方向排列的边界值

约束条件

  • 1 ≤ root.length ≤ 32767
  • 每个 root[i] 都是 -1,或满足 0 ≤ root[i] ≤ 105 的值。
  • root[0] 永远不会是 -1,因此这棵树至少有一个节点。
  • 数组的最后一个节点之后可能还有多余的 -1 项。
  • 空位置的两个子节点也都是空的,且深度最多为 14。
  • 节点值各不相同。

示例

输入
root = [7, 3, 9, 1, 5, 8, -1, -1, -1, 4, 6]
输出
[7, 3, 1, 4, 6, 8, 9]
解释
根节点 7 之后,左边界是 3:它的子节点 1 是叶节点。叶节点有 1、4、6、8。右边界是 9,位于叶节点 8 上方。
challenge icon

进阶

如何按顺时针顺序列出边界:根节点、从上到下的右边缘、从右到左的叶节点,然后是从下到上的左边缘?

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

测试 #1

测试 #2

测试 #3

参数

root = [7, 3, 9, 1, 5, 8, -1, -1, -1, 4, 6]

预期输出

[7, 3, 1, 4, 6, 8, 9]