Menu
CoddyTech

Validate Binary Search Tree

Un arbre binaire est stocké dans le tableau tree selon l’ordre d’un tas : 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), -1 indique une place vide, et le tableau peut se terminer par des entrées supplémentaires -1.

Écris isValidBST, qui renvoie true si l’arbre est un arbre binaire de recherche et false sinon. Dans un arbre binaire de recherche, la valeur de chaque nœud est strictement supérieure à toutes les valeurs de son sous-arbre gauche et strictement inférieure à toutes les valeurs de son sous-arbre droit.

Fonction

isValidBST(tree: integer-array) → boolean
treeinteger-array
l’arbre binaire par niveaux, avec -1 pour une position vide
Renvoieboolean
vrai si l’arbre est un arbre binaire de recherche, faux sinon

Contraintes

  • 1 ≤ tree.length ≤ 32767
  • Chaque tree[i] est -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.
  • Les valeurs peuvent se répéter.

Exemples

Entrée
tree = [8, 3, 12, 1, 6, 10, 15]
Sortie
true
Explication
En lisant dans l’ordre (sous-arbre gauche, nœud, sous-arbre droit), les valeurs sont 1, 3, 6, 8, 10, 12, 15. Elles augmentent strictement, donc chaque nœud se trouve du bon côté de chacun de ses ancêtres.
challenge icon

Pour aller plus loin

Le parent d’un nœud se trouve à l’indice (i-1)/2, arrondi à l’entier inférieur. Peux-tu parcourir l’arbre dans l’ordre avec O(1) espace supplémentaire, en passant par les parents plutôt qu’en utilisant une pile ou la récursion ?

Réinitialiser le code
def isValidBST(tree):
    # Écrivez le code ici

Test #1

Test #2

Test #3

Argument

tree = [8, 3, 12, 1, 6, 10, 15]

Résultat attendu

true