Menu
CoddyTech

Lowest Common Ancestor of a Binary Tree

ふつう木の走査再帰python iconjava iconcpp iconc iconjs icon+10

ヒープ順で配列 root に格納された二分木が与えられます。ルートはインデックス 0 にあり、インデックス i の子は 2*i+1(左)と 2*i+2(右)にあり、空の位置は -1 で表されます。値はそれぞれ異なり、特定の順序には従いません。

異なる2つのノードの値 p と q の最小共通祖先の値を返してください。これは、両方のノードを部分木に含む最も深いノードです。部分木にはその根のノードも含まれるため、q が p の下にある場合、答えは p です。

関数

lowestCommonAncestor(root: integer-array, p: integer, q: integer) → integer
rootinteger-array
二分木をレベル順に並べ、空の位置には -1 を指定します
pinteger
1つのノードの値
qinteger
別のノードの値
戻り値integer
部分木に p と q の両方を含む、最も低いノードの値

制約

  • 2 ≤ root.length ≤ 32767
  • 各root[i]は-1、または0 ≤ root[i] ≤ 104を満たす値です。
  • root[0] が -1 になることは決してなく、木には少なくとも 2 つのノードがあります。
  • 配列の末尾には、最後のノード以降に余分な -1 の要素が含まれる場合があります。
  • 空の場所の子は両方とも空であり、深さは最大でも 14 です。
  • 木内のすべての値は互いに異なり、特定の順序には従いません。
  • p と q は、ツリー内の異なる2つのノードの値であり、順序は問いません。

例

入力
root = [8, 3, 10, 6, 4, 12, 1, -1, -1, 7, 9]p = 6q = 9
出力
3
説明
6 は 3 の左の子で、9 は 3 の右側にある 4 の下にあるため、3 で合流します。値を比較すると、根の 8 が指し示されます。6 はそれより小さく、9 はそれより大きいです。
challenge icon

発展問題

答えを-1とする場合、pまたはqが存在しない可能性があると、1回の走査でどのショートカットが使えなくなりますか?また、どうすればそれでも1回の走査で完了できますか?

コードをリセット
def lowestCommonAncestor(root, p, q):
    # ここにコードを書いてください

テスト #1

テスト #2

テスト #3

引数

root = [8, 3, 10, 6, 4, 12, 1, -1, -1, 7, 9]
p = 6
q = 9

期待される出力

3