Menu
CoddyTech

Kth Smallest Element in a BST

Ricevi un albero binario di ricerca come array root in ordine di heap: la radice si trova all’indice 0, i figli dell’indice i si trovano in 2*i+1 (a sinistra) e 2*i+2 (a destra), e -1 indica una posizione vuota. L’array può terminare con voci -1 aggiuntive. In ogni nodo, il sottoalbero sinistro contiene solo valori minori e quello destro solo valori maggiori.

Restituisci il valore più piccolo numero k nell’albero, contando da 1.

Funzione

kthSmallest(root: integer-array, k: integer) → integer
rootinteger-array
l'albero di ricerca binario in ordine per livelli, con -1 per una posizione vuota
kinteger
la posizione da trovare in ordine crescente, a partire da 1
Restituisceinteger
il k-esimo valore più piccolo nell'albero

Vincoli

  • 1 ≤ root.length ≤ 32767
  • Ogni root[i] è -1 oppure un valore con 0 ≤ root[i] ≤ 105.
  • root[0] non è mai -1, quindi l'albero ha almeno un nodo.
  • L’array può terminare con elementi -1 aggiuntivi dopo l’ultimo nodo.
  • Anche entrambi i figli di una posizione vuota sono vuoti e la profondità è al massimo 14.
  • La regola di ordinamento vale in ogni nodo, quindi nessun valore compare due volte.
  • 1 ≤ k ≤ il numero di nodi nell’albero.

Esempi

Input
root = [41, 17, 65, 6, 29, -1, 90, -1, -1, 22]k = 4
Output
29
Spiegazione
In ordine crescente, i valori sono 6, 17, 22, 29, 41, 65, 90 e il quarto è 29. È il più grande dei quattro valori nel sottoalbero sinistro della radice.
challenge icon

Per approfondire

Se l’albero cambia spesso e ti viene chiesto molte volte il k-esimo valore più piccolo, cosa potrebbe memorizzare ogni nodo affinché ogni query richieda O(h)?

Ripristina il codice
def kthSmallest(root, k):
    # Scrivi il codice qui

Test #1

Test #2

Argomenti

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

Output atteso

29