Menu
CoddyTech

Kth Smallest Element in a BST

Kamu mendapat binary search tree sebagai array root dalam urutan heap: root berada di indeks 0, anak-anak dari indeks i berada di 2*i+1 (kiri) dan 2*i+2 (kanan), dan -1 menandai posisi kosong. Array dapat diakhiri dengan entri -1 tambahan. Pada setiap node, subtree kiri hanya berisi nilai yang lebih kecil dan subtree kanan hanya berisi nilai yang lebih besar.

Kembalikan nilai terkecil ke-k di dalam tree, dihitung mulai dari 1.

Fungsi

kthSmallest(root: integer-array, k: integer) → integer
rootinteger-array
pohon pencarian biner dalam urutan level, dengan -1 untuk posisi kosong
kinteger
posisi yang dicari dalam urutan menaik, dimulai dari 1
Mengembalikaninteger
nilai terkecil ke-k dalam pohon

Batasan

  • 1 ≤ root.length ≤ 32767
  • Setiap root[i] adalah -1 atau nilai dengan 0 ≤ root[i] ≤ 105.
  • root[0] tidak pernah -1, jadi pohon memiliki setidaknya satu simpul.
  • array tersebut mungkin diakhiri dengan entri -1 tambahan setelah node terakhir.
  • Kedua child dari spot kosong juga kosong, dan kedalamannya paling banyak 14.
  • Aturan pengurutan berlaku di setiap node, jadi tidak ada nilai yang muncul dua kali.
  • 1 ≤ k ≤ jumlah node dalam pohon.

Contoh

Input
root = [41, 17, 65, 6, 29, -1, 90, -1, -1, 22]k = 4
Output
29
Penjelasan
Dalam urutan menaik, nilainya adalah 6, 17, 22, 29, 41, 65, 90, dan nilai keempat adalah 29. Nilai ini adalah yang terbesar dari empat nilai di subtree kiri root.
challenge icon

Pertanyaan lanjutan

Jika tree sering berubah dan kamu diminta mencari nilai terkecil ke-k berkali-kali, apa yang dapat disimpan setiap node agar setiap kueri membutuhkan waktu O(h)?

Reset kode
def kthSmallest(root, k):
    # Tulis kodemu di sini

Tes #1

Tes #2

Argumen

root = [41, 17, 65, 6, 29, -1, 90, -1, -1, 22]
k = 4

Output yang diharapkan

29