Menu
CoddyTech

Lowest Common Ancestor of a BST

ふつう二分探索木python iconjava iconcpp iconc iconjs icon+10

二分探索木が配列 tree にレベル順で格納されており、その中に p と q という2つの値がどちらも存在します。ルートはインデックス 0 にあり、インデックス i のノードの子は 2*i+1(左)と 2*i+2(右)にあります。-1 は空の位置を示し、配列の末尾に余分な -1 が含まれる場合があります。二分探索木では、ノードの左部分木にあるすべての値はそのノードの値より小さく、右部分木にあるすべての値は大きくなります。

lowestCommonAncestor という名前の関数を作成し、p と q の最小共通祖先の値を返してください。最小共通祖先とは、両方を部分木に持つ最も深いノードです。ノードはそれ自身の部分木に含まれるため、p が q より上にある場合、答えは p 自身です。

関数

lowestCommonAncestor(tree: integer-array, p: integer, q: integer) → integer
treeinteger-array
空の位置を -1 で表した二分探索木のレベル順
pinteger
最初に見つける値
qinteger
見つける2番目の値
戻り値integer
p と q の両方を部分木に持つ最も深いノードの値

制約

  • 1 ≤ tree.length ≤ 32767
  • 各tree[i]は-1または0 ≤ tree[i] ≤ 105を満たす値です。
  • tree[0] が -1 になることはないため、木には少なくとも1つのノードがあります。
  • 配列は、最後のノード以降に余分な-1のエントリが続く場合があります。
  • 空の位置の子は両方とも空であり、深さは最大でも14です。
  • この木は有効な二分探索木なので、すべての値は異なります。
  • p と q は、ツリー内のノードの値です。順序は任意で、同じ値の場合もあります。

例

入力
tree = [20, 8, 31, 3, 12, 25, 40, -1, -1, 10, 15]p = 3q = 15
出力
8
説明
3は8の左の子で、15は8の右側で12の下にあります。それぞれのノードから上へたどると、両方が最初にたどり着くノードは8なので、それが答えです。ルートの20も共通の祖先ですが、より上位にあります。

lock icon提出時に隠しテスト+12件

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