Menu
CoddyTech

Subtree of Another Tree

İki ikili ağaç veriliyor: root ve subRoot. Her biri, seviye sırasına göre bir dizide saklanıyor: kök 0 indeksinde, i indeksindeki düğümün çocukları 2*i+1 (sol) ve 2*i+2 (sağ) indekslerinde yer alıyor; boş bir konum için -1 kullanılıyor. Bir dizinin sonunda fazladan -1 girdileri bulunabilir.

root içindeki herhangi bir düğümün, tüm alt düğümleriyle birlikte, şekli ve değerleri subRoot ile tam olarak aynıysa true, aksi hâlde false döndürün. root ağacının tamamı da sayılır.

Fonksiyon

isSubtree(root: integer-array, subRoot: integer-array) → boolean
rootinteger-array
aranacak ağaç, boş konumlar için -1 kullanılarak seviye sırasına göre
subRootinteger-array
aranacak ağaç, aynı biçimde
Döndürürboolean
true, subRoot root içinde tüm alt öğeleriyle birlikte bir düğüm olarak bulunuyorsa; aksi hâlde false

Kısıtlar

  • 1 ≤ root.length ≤ 32767 ve 1 ≤ subRoot.length ≤ 32767
  • Her giriş -1 ya da 0 ile 104 arasında bir değerdir.
  • root[0] ve subRoot[0] hiçbir zaman -1 değildir, dolayısıyla her iki ağaçta da en az bir düğüm vardır.
  • Her iki diziden herhangi biri, son düğümünden sonra fazladan -1 girdileriyle bitebilir.
  • Boş bir noktanın her iki çocuğu da boştur ve her ağacın derinliği en fazla 14 olur.
  • Değerler tekrarlanabilir.

Örnekler

Girdi
root = [6, 2, 8, 1, 3, -1, 9]subRoot = [2, 1, 3]
Çıktı
true
Açıklama
1 indeksindeki 2 düğümünün çocukları 1 ve 3'tür ve ikisi de yapraktır. Bu tam olarak subRoot'tur.
challenge icon

Ek soru

Her alt ağacı değerinden ve çocuklarının parmak izlerinden yola çıkarak parmak iziyle tanımlayabilir misin, böylece subRoot ile karşılaştırma O(1) maliyetli olur? İki farklı alt ağaç çakıştığında ne yaparsın?

Kodu sıfırla
def isSubtree(root, subRoot):
    # Kodu buraya yazın

Test #1

Test #2

Test #3

Argümanlar

root = [6, 2, 8, 1, 3, -1, 9]
subRoot = [2, 1, 3]

Beklenen Çıktı

true