Menu
CoddyTech

Lowest Common Ancestor of a BST

Ti viene dato un albero di ricerca binario memorizzato nell’array tree in ordine per livelli e due valori p e q che compaiono entrambi al suo interno. La radice si trova all’indice 0, i figli del nodo all’indice i si trovano agli indici 2*i+1 (sinistro) e 2*i+2 (destro), -1 indica una posizione vuota e l’array può terminare con altre voci -1. In un albero di ricerca binario, ogni valore nel sottoalbero sinistro di un nodo è minore del valore del nodo, mentre ogni valore nel suo sottoalbero destro è maggiore.

Scrivi una funzione chiamata lowestCommonAncestor che restituisca il valore del più basso antenato comune di p e q: il nodo più profondo che li ha entrambi nel proprio sottoalbero. Un nodo è considerato parte del proprio sottoalbero, quindi se p si trova sopra q, la risposta è p stesso.

Funzione

lowestCommonAncestor(tree: integer-array, p: integer, q: integer) → integer
treeinteger-array
l'albero binario di ricerca in ordine di livello, 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 con 0 ≤ tree[i] ≤ 105.
  • tree[0] non è mai -1, quindi l’albero ha almeno un nodo.
  • L'array può terminare con ulteriori voci -1 dopo l'ultimo nodo.
  • Entrambi i figli di uno spazio vuoto sono vuoti, e la profondità è al massimo 14.
  • L'albero è un albero di ricerca binario 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
Il 3 è il figlio sinistro di 8, e il 15 si trova sotto 12, a destra di 8. Risalendo da ciascuno di essi, il primo nodo che entrambi raggiungono è 8, quindi questa è la risposta; anche la radice 20 è un antenato comune, ma si trova più in alto.

lock icon+12 test nascosti all’invio

challenge icon

Per approfondire

Che cosa cambieresti se p o q potessero non essere presenti nell’albero e la funzione dovesse restituire -1 in quel caso?

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

Caso 1

Caso 2

Caso 3

Input

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

Atteso

8