Menu
CoddyTech

Lowest Common Ancestor of a BST

你得到了一棵以堆顺序存储在数组 tree 中的二叉搜索树:根节点位于索引 0,索引 i 的子节点位于 2*i+1(左侧)和 2*i+2(右侧),-1 表示空位置。节点左子树中的所有值都小于该节点的值,右子树中的所有值都大于该节点的值。

编写 lowestCommonAncestor,返回树中值 p 和 q 的最近公共祖先的值:也就是同时包含这两个值的子树中最深的节点。节点属于自己的子树,因此如果 p 位于 q 的上方,答案就是 p。

函数

lowestCommonAncestor(tree: integer-array, p: integer, q: integer) → integer
treeinteger-array
按层序遍历二叉搜索树,空位置用 -1 表示
pinteger
要查找的第一个值
qinteger
要查找的第二个值
返回值integer
其子树中同时包含 p 和 q 的最深节点的值

约束条件

  • 1 ≤ tree.length ≤ 32767
  • 每个 tree[i] 都是 -1,或是满足 0 ≤ tree[i] ≤ 105 的值。
  • tree[0] 永远不会是 -1,因此树至少有一个节点。
  • 数组可能在最后一个节点之后,以额外的 -1 项结束。
  • 空位置的两个子节点也都是空的,深度最多为 14。
  • 这棵树是有效的二叉搜索树,因此其中所有值都不相同。
  • p 和 q 是树中节点的值。它们的顺序任意,也可能相等。

示例

输入
tree = [20, 8, 31, 3, 12, 25, 40, -1, -1, 10, 15]p = 3q = 15
输出
8
解释
从 3 和 15 向上遍历,它们首先到达的共同节点是 8:3 是它的左子节点,而 15 位于右侧的 12 下方。根节点 20 也是共同祖先,但位置更高。
challenge icon

进阶

如果 p 或 q 可能不在树中,并且函数在这种情况下必须返回 -1,你会做哪些修改?

重置代码
def lowestCommonAncestor(tree, p, q):
    # 在这里编写代码

测试 #1

测试 #2

测试 #3

参数

tree = [20, 8, 31, 3, 12, 25, 40, -1, -1, 10, 15]
p = 3
q = 15

预期输出

8