Menu
CoddyTech

Lowest Common Ancestor of a BST

On vous donne un arbre binaire de recherche stocké dans le tableau tree en ordre par niveaux, ainsi que deux valeurs p et q qui y figurent toutes les deux. La racine se trouve à l’indice 0, les enfants du nœud à l’indice i se trouvent aux indices 2*i+1 (à gauche) et 2*i+2 (à droite), -1 indique une case vide, et le tableau peut se terminer par des entrées -1 supplémentaires. Dans un arbre binaire de recherche, 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 lui est supérieure.

Écrivez une fonction nommée lowestCommonAncestor qui renvoie la valeur du plus bas ancêtre commun de p et q : le nœud le plus profond qui les a tous les deux dans son sous-arbre. Un nœud est considéré comme faisant partie de son propre sous-arbre ; ainsi, si p se trouve au-dessus de q, la réponse est p lui-même.

Fonction

lowestCommonAncestor(tree: integer-array, p: integer, q: integer) → integer
treeinteger-array
l’arbre binaire de recherche en parcours par niveaux, avec -1 pour une position 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] vaut -1 ou une valeur telle que 0 ≤ tree[i] ≤ 105.
  • tree[0] n’est jamais -1, donc l’arbre comporte 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
3 est le fils gauche de 8, et 15 se trouve sous 12, à droite de 8. En remontant depuis chacun d’eux, le premier nœud qu’ils atteignent tous les deux est 8 : c’est donc la réponse ; la racine 20 est également un ancêtre commun, mais plus haut.

lock icon+12 tests cachés à la soumission

challenge icon

Pour aller plus loin

Que changerais-tu si p ou q pouvait être absent de 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
Cas de test

Cas 1

Cas 2

Cas 3

Entrée

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

Attendu

8