Menu
CoddyTech

Validate Binary Search Tree

On vous donne un arbre binaire stocké dans le tableau tree en ordre par niveaux. 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 un emplacement vide, et le tableau peut se terminer par des entrées -1 supplémentaires.

Écrivez une fonction nommée isValidBST qui renvoie true si l’arbre est un arbre binaire de recherche et false dans le cas contraire. 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 celles de son sous-arbre droit. Deux valeurs égales ne peuvent jamais se trouver toutes les deux dans un arbre valide.

Fonction

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

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 contient 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
Chaque nœud se trouve du bon côté de tous les nœuds situés au-dessus de lui. En lisant dans l’ordre (sous-arbre gauche, nœud, sous-arbre droit), on obtient les valeurs 1, 3, 6, 8, 10, 12, 15, strictement croissantes, ce qui est caractéristique d’un arbre de recherche.

lock icon+16 tests cachés à la soumission

challenge icon

Pour aller plus loin

Le parent du nœud à l’indice i se trouve à (i-1)/2, arrondi à l’entier inférieur. Peux-tu parcourir l’arbre dans l’ordre avec un espace supplémentaire de O(1), 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
Cas de test

Cas 1

Cas 2

Cas 3

Entrée

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

Attendu

true