Menu
CoddyTech

Lowest Common Ancestor of a BST

Seviye sırasına göre tree dizisinde saklanan bir ikili arama ağacı ve bu ağaçta bulunan p ve q değerleri veriliyor. Kök 0 dizininde bulunur, i dizinindeki düğümün çocukları 2*i+1 (sol) ve 2*i+2 (sağ) dizinlerinde bulunur, boş bir yeri -1 belirtir ve dizinin sonunda fazladan -1 girdileri olabilir. İkili arama ağacında, bir düğümün sol alt ağacındaki her değer düğümün değerinden küçük, sağ alt ağacındaki her değer ise daha büyüktür.

lowestCommonAncestor adlı bir fonksiyon yazın. Bu fonksiyon, p ve q değerlerinin en düşük ortak atasının değerini döndürmelidir: her ikisini de alt ağacında bulunduran en derindeki düğüm. Bir düğüm kendi alt ağacının parçası sayılır; bu nedenle p, q'nun üstündeyse yanıt doğrudan p olur.

Fonksiyon

lowestCommonAncestor(tree: integer-array, p: integer, q: integer) → integer
treeinteger-array
ikili arama ağacını seviye sırasıyla, boş konumlar için -1 kullanarak
pinteger
bulunacak ilk değer
qinteger
bulunacak ikinci değer
Döndürürinteger
Alt ağacında hem p hem de q bulunan en derin düğümün değeri

Kısıtlar

  • 1 ≤ tree.length ≤ 32767
  • Her tree[i], -1 ya da 0 ≤ tree[i] ≤ 105 koşulunu sağlayan bir değerdir.
  • tree[0] hiçbir zaman -1 olmaz, bu nedenle ağaçta en az bir düğüm vardır.
  • Dizi, son düğümden sonra fazladan -1 girdileriyle bitebilir.
  • Boş bir noktanın her iki çocuğu da boştur ve derinlik en fazla 14 olur.
  • Ağaç geçerli bir ikili arama ağacıdır, bu nedenle tüm değerleri birbirinden farklıdır.
  • p ve q ağaçtaki düğümlerin değerleridir. Herhangi bir sırada gelebilirler ve eşit olabilirler.

Örnekler

Girdi
tree = [20, 8, 31, 3, 12, 25, 40, -1, -1, 10, 15]p = 3q = 15
Çıktı
8
Açıklama
3, 8'in sol çocuğudur ve 15, 8'in sağında 12'nin altında yer alır. Her birinden yukarı doğru çıkıldığında, ikisinin de ulaştığı ilk düğüm 8'dir; dolayısıyla cevap budur. Kök 20 de ortak bir atadır, ancak daha üsttedir.

lock iconGönderirken +12 gizli test

challenge icon

Ek soru

Tree'de p veya q eksik olabilseydi ve bu durumda fonksiyonun -1 döndürmesi gerekseydi neyi değiştirirdin?

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

Durum 1

Durum 2

Durum 3

Girdi

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

Beklenen

8