Menu
CoddyTech

Top View of Binary Tree

Vous obtenez un arbre binaire stocké dans le tableau root dans l’ordre d’un tas : la racine à l’index 0, les enfants de l’index i aux index 2*i+1 (à gauche) et 2*i+2 (à droite), et -1 pour un emplacement vide.

La racine se trouve dans la colonne 0 ; un enfant gauche se trouve une colonne à gauche de son parent et un enfant droit, une colonne à droite. Vue d’en haut, on voit le nœud le moins profond de chaque colonne ; en cas d’égalité, on choisit celui qui apparaît en premier dans son niveau, de gauche à droite (l’index le plus petit). Renvoyez les valeurs visibles, de la colonne la plus à gauche à la colonne la plus à droite.

Fonction

topView(root: integer-array) → integer-array
rootinteger-array
l’arbre en ordre de tas, avec -1 pour une place vide
Renvoieinteger-array
la valeur vue d’en haut dans chaque colonne, en commençant par la colonne la plus à gauche

Contraintes

  • 1 ≤ root.length ≤ 32767
  • Chaque root[i] est -1 ou une valeur telle que 0 ≤ root[i] ≤ 104, et aucune valeur n’apparaît deux fois.
  • root[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 l’arbre compte au plus 14 niveaux.

Exemples

Entrée
root = [5, 2, 9, 4, 7, 1, 6]
Sortie
[4, 2, 5, 9, 6]
Explication
De gauche à droite, les colonnes contiennent 4 (colonne -2), 2 (-1), la racine 5 (0), 9 (1) et 6 (2). 7 et 1 se trouvent également dans la colonne 0, mais la racine est au-dessus d’eux.
challenge icon

Pour aller plus loin

Avec des objets de nœud au lieu d’un tableau, il n’y a pas d’index pour départager une égalité. Comment formulerais-tu la règle en cas d’égalité, et ton code de parcours en largeur change-t-il ?

Réinitialiser le code
def topView(root):
    # Écrivez le code ici

Test #1

Test #2

Test #3

Argument

root = [5, 2, 9, 4, 7, 1, 6]

Résultat attendu

[4, 2, 5, 9, 6]