Menu
CoddyTech

Vertical Order Traversal of a Binary Tree

Un albero binario è memorizzato nell'array root in ordine heap: la radice si trova all'indice 0, i figli dell'indice i si trovano rispettivamente in 2*i+1 (sinistra) e 2*i+2 (destra), -1 indica una posizione vuota e l'array può terminare con ulteriori elementi -1.

La radice si trova nella colonna 0; un figlio sinistro si trova una colonna a sinistra del genitore, mentre un figlio destro si trova una colonna a destra. Restituisci una lista per ogni colonna, da sinistra a destra. All'interno di una colonna, elenca i nodi dall'alto verso il basso e, tra i nodi che condividono la stessa colonna e profondità, in ordine crescente di valore.

Funzione

verticalTraversal(root: integer-array) → integer-2d-array
rootinteger-array
l'albero in ordine heap, con -1 per una posizione vuota
Restituisceinteger-2d-array
un elenco di valori per ogni colonna, iniziando dalla colonna più a sinistra e procedendo dall’alto verso il basso

Vincoli

  • 1 ≤ root.length ≤ 32767
  • Ogni root[i] è -1 oppure un valore con 0 ≤ root[i] ≤ 5000, e nessun valore compare due volte.
  • root[0] non è mai -1, quindi l'albero ha almeno un nodo.
  • L'array può terminare con voci -1 aggiuntive oltre l'ultimo nodo.
  • Entrambi i figli di una posizione vuota sono vuoti anche loro, e l’albero ha al massimo 14 livelli.

Esempi

Input
root = [5, 2, 9, 4, 7, 1, 6]
Output
[[4], [2], [5, 1, 7], [9], [6]]
Spiegazione
La colonna 0 contiene la radice 5, poi 7 e 1 due livelli più in basso. Questi due condividono la colonna e la profondità, quindi 1 viene prima di 7, anche se 7 è più a sinistra.
challenge icon

Per approfondire

Ogni valore è al massimo 5000. Puoi sfruttare questo fatto per eliminare l’ordinamento per confronto e completare in tempo O(n + 5000)?

Ripristina il codice
def verticalTraversal(root):
    # Scrivi il codice qui

Test #1

Test #2

Test #3

Argomento

root = [5, 2, 9, 4, 7, 1, 6]

Output atteso

[[4], [2], [5, 1, 7], [9], [6]]