Menu
CoddyTech

Lowest Common Ancestor of a BST

Hai un albero di ricerca binario memorizzato nell’array tree in ordine heap: la radice si trova all’indice 0, i figli dell’indice i si trovano rispettivamente a 2*i+1 (sinistra) e 2*i+2 (destra), e -1 indica una posizione vuota. Ogni valore nel sottoalbero sinistro di un nodo è minore del valore del nodo, mentre ogni valore nel sottoalbero destro è maggiore.

Scrivi lowestCommonAncestor, che restituisce il valore dell’antenato comune più basso dei valori p e q, entrambi presenti nell’albero: il nodo più profondo che li ha entrambi nel proprio sottoalbero. Un nodo fa parte del proprio sottoalbero, quindi se p si trova sopra q, la risposta è p.

Funzione

lowestCommonAncestor(tree: integer-array, p: integer, q: integer) → integer
treeinteger-array
l'albero binario di ricerca in ordine per livelli, con -1 per una posizione vuota
pinteger
il primo valore da trovare
qinteger
il secondo valore da trovare
Restituisceinteger
il valore del nodo più profondo che ha sia p sia q nel proprio sottoalbero

Vincoli

  • 1 ≤ tree.length ≤ 32767
  • Ogni tree[i] è -1 oppure un valore tale che 0 ≤ tree[i] ≤ 105.
  • tree[0] non è mai -1, quindi l'albero ha almeno un nodo.
  • L'array può terminare con voci -1 aggiuntive dopo l'ultimo nodo.
  • Entrambi i figli di una posizione vuota sono vuoti a loro volta, e la profondità è al massimo 14.
  • L'albero è un albero binario di ricerca valido, quindi tutti i suoi valori sono distinti.
  • p e q sono valori dei nodi dell’albero. Possono essere in qualsiasi ordine e possono essere uguali.

Esempi

Input
tree = [20, 8, 31, 3, 12, 25, 40, -1, -1, 10, 15]p = 3q = 15
Output
8
Spiegazione
Salendo da 3 e da 15, il primo nodo che raggiungono entrambi è 8: 3 è il suo figlio sinistro e 15 si trova sotto 12 sul suo lato destro. Anche la radice 20 è un antenato comune, ma più in alto.
challenge icon

Per approfondire

Che cosa cambieresti se p o q potessero mancare dall'albero e la funzione dovesse restituire -1 in quel caso?

Ripristina il codice
def lowestCommonAncestor(tree, p, q):
    # Scrivi il codice qui

Test #1

Test #2

Test #3

Argomenti

tree = [20, 8, 31, 3, 12, 25, 40, -1, -1, 10, 15]
p = 3
q = 15

Output atteso

8