Menu
CoddyTech

Lowest Common Ancestor of a BST

On vous donne un arbre binaire de recherche stocké selon l’ordre du tas dans le tableau tree : la racine se trouve à l’indice 0, les enfants de l’indice i se trouvent aux indices 2*i+1 (à gauche) et 2*i+2 (à droite), et -1 indique un emplacement vide. Chaque valeur du sous-arbre gauche d’un nœud est inférieure à la valeur de ce nœud, et chaque valeur de son sous-arbre droit est supérieure.

Écrivez lowestCommonAncestor, qui renvoie la valeur du plus bas ancêtre commun des valeurs p et q, toutes deux présentes dans l’arbre : le nœud le plus profond qui les a toutes deux dans son sous-arbre. Un nœud fait partie de son propre sous-arbre ; ainsi, si p se trouve au-dessus de q, la réponse est p.

Fonction

lowestCommonAncestor(tree: integer-array, p: integer, q: integer) → integer
treeinteger-array
l’arbre binaire de recherche en parcours par niveaux, avec -1 pour un emplacement vide
pinteger
la première valeur à trouver
qinteger
la deuxième valeur à trouver
Renvoieinteger
la valeur du nœud le plus profond qui a à la fois p et q dans son sous-arbre

Contraintes

  • 1 ≤ tree.length ≤ 32767
  • Chaque tree[i] est égal à -1 ou à une valeur telle que 0 ≤ tree[i] ≤ 105.
  • tree[0] n’est jamais -1, donc l’arbre a au moins un nœud.
  • Le tableau peut se terminer par des entrées -1 supplémentaires après le dernier nœud.
  • Les deux enfants d’un emplacement vide sont également vides, et la profondeur est d’au plus 14.
  • L’arbre est un arbre binaire de recherche valide, donc toutes ses valeurs sont distinctes.
  • p et q sont des valeurs de nœuds de l’arbre. Ils peuvent être dans n’importe quel ordre et peuvent être égaux.

Exemples

Entrée
tree = [20, 8, 31, 3, 12, 25, 40, -1, -1, 10, 15]p = 3q = 15
Sortie
8
Explication
En remontant depuis 3 et depuis 15, le premier nœud qu’ils atteignent tous les deux est 8 : 3 est son enfant gauche et 15 se trouve sous 12, à sa droite. La racine 20 est également un ancêtre commun, mais plus haut.
challenge icon

Pour aller plus loin

Que changerais-tu si p ou q pouvait manquer dans l’arbre et que la fonction devait renvoyer -1 dans ce cas ?

Réinitialiser le code
def lowestCommonAncestor(tree, p, q):
    # Écrivez le code ici

Test #1

Test #2

Test #3

Arguments

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

Résultat attendu

8