Menu
CoddyTech

Lowest Common Ancestor of a BST

Kamu mendapatkan binary search tree yang disimpan dalam urutan heap di array tree: root berada pada indeks 0, anak-anak dari indeks i berada di 2*i+1 (kiri) dan 2*i+2 (kanan), dan -1 menandai posisi kosong. Setiap nilai di subtree kiri sebuah node lebih kecil daripada nilai node tersebut, dan setiap nilai di subtree kanannya lebih besar.

Tulis lowestCommonAncestor, yang mengembalikan nilai leluhur bersama terendah dari nilai p dan q, yang keduanya ada di tree: node terdalam yang memiliki keduanya di subtree-nya. Sebuah node termasuk dalam subtree-nya sendiri, jadi jika p berada di atas q, jawabannya adalah p.

Fungsi

lowestCommonAncestor(tree: integer-array, p: integer, q: integer) → integer
treeinteger-array
pohon pencarian biner dalam urutan level, dengan -1 untuk posisi kosong
pinteger
nilai pertama yang dicari
qinteger
nilai kedua yang dicari
Mengembalikaninteger
nilai node terdalam yang memiliki p dan q di dalam subpohonnya

Batasan

  • 1 ≤ tree.length ≤ 32767
  • Setiap tree[i] adalah -1 atau nilai dengan 0 ≤ tree[i] ≤ 105.
  • tree[0] tidak pernah -1, jadi tree memiliki setidaknya satu node.
  • array tersebut mungkin diakhiri dengan entri -1 tambahan setelah node terakhir.
  • Kedua anak dari posisi kosong juga kosong, dan kedalamannya paling banyak 14.
  • Pohon tersebut adalah binary search tree yang valid, jadi semua nilainya berbeda.
  • p dan q adalah nilai dari node dalam pohon. Keduanya dapat diberikan dalam urutan apa pun dan nilainya mungkin sama.

Contoh

Input
tree = [20, 8, 31, 3, 12, 25, 40, -1, -1, 10, 15]p = 3q = 15
Output
8
Penjelasan
Dengan menelusuri ke atas dari 3 dan 15, node pertama yang dicapai keduanya adalah 8: 3 adalah anak kirinya, dan 15 berada di bawah 12 di sisi kanannya. Root 20 juga merupakan leluhur bersama, tetapi posisinya lebih tinggi.
challenge icon

Pertanyaan lanjutan

Apa yang akan kamu ubah jika p atau q mungkin tidak ada di dalam pohon, dan fungsi harus mengembalikan -1 dalam kasus tersebut?

Reset kode
def lowestCommonAncestor(tree, p, q):
    # Tulis kodemu di sini

Tes #1

Tes #2

Tes #3

Argumen

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

Output yang diharapkan

8