Menu
CoddyTech

Kth Smallest Element in a BST

On vous donne un arbre binaire de recherche sous forme de tableau root en ordre de 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), et -1 indique un emplacement vide. Le tableau peut se terminer par des entrées -1 supplémentaires. À chaque nœud, le sous-arbre gauche ne contient que des valeurs plus petites et le sous-arbre droit, uniquement des valeurs plus grandes.

Renvoyez la k-ième plus petite valeur de l’arbre, en comptant à partir de 1.

Fonction

kthSmallest(root: integer-array, k: integer) → integer
rootinteger-array
l’arbre binaire de recherche par niveau, avec -1 pour une place vide
kinteger
la position à trouver dans l’ordre croissant, en commençant à 1
Renvoieinteger
la k-ième plus petite valeur dans l’arbre

Contraintes

  • 1 ≤ root.length ≤ 32767
  • Chaque root[i] vaut -1 ou une valeur telle que 0 ≤ root[i] ≤ 105.
  • root[0] n’est jamais -1, donc l’arbre comporte au moins un nœud.
  • L’array 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.
  • La règle d’ordre s’applique à chaque nœud, donc aucune valeur n’apparaît deux fois.
  • 1 ≤ k ≤ le nombre de nœuds dans l’arbre.

Exemples

Entrée
root = [41, 17, 65, 6, 29, -1, 90, -1, -1, 22]k = 4
Sortie
29
Explication
Par ordre croissant, les valeurs sont 6, 17, 22, 29, 41, 65, 90, et la quatrième est 29. C’est la plus grande des quatre valeurs du sous-arbre gauche de la racine.
challenge icon

Pour aller plus loin

Si l’arbre change souvent et qu’on vous demande de nombreuses fois la k-ième plus petite valeur, que pourrait stocker chaque nœud pour que chaque requête prenne O(h) ?

Réinitialiser le code
def kthSmallest(root, k):
    # Écrivez le code ici

Test #1

Test #2

Arguments

root = [41, 17, 65, 6, 29, -1, 90, -1, -1, 22]
k = 4

Résultat attendu

29