Menu
CoddyTech

Lowest Common Ancestor of a Binary Tree

Hai un albero binario nell’array root, disposto secondo l’ordine heap: la radice all’indice 0, i figli dell’indice i agli indici 2*i+1 (sinistro) e 2*i+2 (destro), e -1 per una posizione vuota. I valori sono distinti e non seguono alcun ordine.

Restituisci il valore dell’antenato comune più basso di p e q, i valori di due nodi diversi: il nodo più profondo il cui sottoalbero contiene entrambi. Un sottoalbero include il suo nodo radice, quindi se q si trova sotto p, la risposta è p.

Funzione

lowestCommonAncestor(root: integer-array, p: integer, q: integer) → integer
rootinteger-array
l'albero binario in ordine per livelli, con -1 per una posizione vuota
pinteger
il valore di un nodo
qinteger
il valore di un altro nodo
Restituisceinteger
il valore del nodo più basso il cui sottoalbero contiene sia p che q

Vincoli

  • 2 ≤ root.length ≤ 32767
  • Ogni root[i] è -1 oppure un valore tale che 0 ≤ root[i] ≤ 104.
  • root[0] non è mai -1 e l'albero ha almeno due nodi.
  • L'array può terminare con voci -1 aggiuntive oltre l'ultimo nodo.
  • Entrambi i figli di uno spazio vuoto sono anch’essi vuoti e la profondità è al massimo 14.
  • Tutti i valori nell’albero sono distinti e non sono ordinati.
  • p e q sono i valori di due nodi diversi dell’albero, in qualsiasi ordine.

Esempi

Input
root = [8, 3, 10, 6, 4, 12, 1, -1, -1, 7, 9]p = 6q = 9
Output
3
Spiegazione
6 è il figlio sinistro di 3, e 9 si trova sotto 4, a destra di 3, quindi si incontrano in 3. Confrontando i valori si arriverebbe alla radice 8: 6 è più piccolo e 9 più grande.
challenge icon

Per approfondire

Se p o q potrebbero essere assenti, con -1 come risposta, quale scorciatoia si interrompe nel singolo passaggio e come puoi comunque completare in un'unica traversata?

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

Test #1

Test #2

Test #3

Argomenti

root = [8, 3, 10, 6, 4, 12, 1, -1, -1, 7, 9]
p = 6
q = 9

Output atteso

3