Menu
CoddyTech

Lowest Common Ancestor of a Binary Tree

Yığın sıralamasındaki bir dizide root ikili ağacını alırsınız: kök 0 indeksinde, i indeksindeki düğümün çocukları 2*i+1 (sol) ve 2*i+2 (sağ) indekslerinde, boş konumlar ise -1 değerindedir. Değerler birbirinden farklıdır ve belirli bir sıralamaya uymaz.

İki farklı düğümün değerleri olan p ve q için en düşük ortak atanın değerini döndürün: her ikisini de alt ağacında barındıran en derin düğüm. Bir alt ağaç tepe düğümünü de içerir; bu nedenle q, p'nin altındaysa yanıt p'dir.

Fonksiyon

lowestCommonAncestor(root: integer-array, p: integer, q: integer) → integer
rootinteger-array
ikili ağacı seviye sırasına göre, boş bir yer için -1
pinteger
bir düğümün değeri
qinteger
başka bir düğümün değeri
Döndürürinteger
Alt ağacında hem p'yi hem de q'yu barındıran en alttaki düğümün değeri

Kısıtlar

  • 2 ≤ root.length ≤ 32767
  • Her root[i], -1 ya da 0 ≤ root[i] ≤ 104 aralığında bir değerdir.
  • root[0] hiçbir zaman -1 değildir ve ağaçta en az iki düğüm vardır.
  • Dizi, son düğümden sonra fazladan -1 girdileriyle bitebilir.
  • Boş bir konumun her iki çocuğu da boştur ve derinlik en fazla 14'tür.
  • Ağaçtaki tüm değerler birbirinden farklıdır ve herhangi bir sıralamaya tabi değildir.
  • p ve q, ağaçtaki iki farklı düğümün değerleridir; sıra önemli değildir.

Örnekler

Girdi
root = [8, 3, 10, 6, 4, 12, 1, -1, -1, 7, 9]p = 6q = 9
Çıktı
3
Açıklama
6, 3'ün sol çocuğudur ve 9, 3'ün sağında 4'ün altında yer alır; bu nedenle 3'te buluşurlar. Değerleri karşılaştırmak kökü, yani 8'i işaret eder: 6 daha küçüktür, 9 ise daha büyüktür.
challenge icon

Ek soru

Yanıtın -1 olabileceği, yani p veya q'nun bulunmayabileceği durumda, tek geçişteki hangi kestirme bozulur ve yine de tek bir dolaşımda nasıl tamamlarsın?

Kodu sıfırla
def lowestCommonAncestor(root, p, q):
    # Kodu buraya yazın

Test #1

Test #2

Test #3

Argümanlar

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

Beklenen Çıktı

3