Menu
CoddyTech

Subtree of Another Tree

Kamu mendapatkan dua pohon biner, root dan subRoot, yang masing-masing disimpan dalam sebuah array dengan urutan per level: root berada pada indeks 0, anak-anak dari indeks i berada pada 2*i+1 (kiri) dan 2*i+2 (kanan), dan -1 menunjukkan posisi kosong. Sebuah array mungkin diakhiri dengan entri -1 tambahan.

Kembalikan true jika ada node pada root, beserta semua turunannya, yang bentuk dan nilainya sama persis dengan subRoot, dan false jika tidak. Seluruh root juga dihitung.

Fungsi

isSubtree(root: integer-array, subRoot: integer-array) → boolean
rootinteger-array
pohon yang akan dicari, dalam urutan level dengan -1 untuk posisi kosong
subRootinteger-array
pohon yang harus dicari, dalam format yang sama
Mengembalikanboolean
true jika subRoot muncul di root sebagai node dengan semua turunannya, false jika tidak

Batasan

  • 1 ≤ root.length ≤ 32767 dan 1 ≤ subRoot.length ≤ 32767
  • Setiap entri adalah -1 atau nilai dari 0 hingga 104.
  • root[0] dan subRoot[0] tidak pernah bernilai -1, jadi kedua pohon memiliki setidaknya satu simpul.
  • Salah satu array dapat diakhiri dengan entri -1 tambahan setelah node terakhirnya.
  • Kedua anak dari posisi kosong juga kosong, dan setiap pohon memiliki kedalaman paling banyak 14.
  • Nilai dapat berulang.

Contoh

Input
root = [6, 2, 8, 1, 3, -1, 9]subRoot = [2, 1, 3]
Output
true
Penjelasan
Node 2 pada indeks 1 memiliki anak 1 dan 3, dan keduanya adalah daun. Itulah tepatnya subRoot.
challenge icon

Pertanyaan lanjutan

Bisakah kamu membuat sidik jari setiap subtree dari nilainya dan sidik jari anak-anaknya, sehingga perbandingan dengan subRoot membutuhkan biaya O(1)? Apa yang kamu lakukan ketika dua subtree yang berbeda menghasilkan sidik jari yang sama?

Reset kode
def isSubtree(root, subRoot):
    # Tulis kodemu di sini

Tes #1

Tes #2

Tes #3

Argumen

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

Output yang diharapkan

true