Menu
CoddyTech

Vertical Order Traversal of a Binary Tree

Un arbre binaire est stocké dans le tableau root 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 un emplacement vide, et le tableau peut se terminer par des entrées -1 supplémentaires.

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. Renvoyez une liste par colonne, de gauche à droite. Dans chaque colonne, énumérez les nœuds de haut en bas, et les nœuds partageant une colonne et une profondeur par ordre croissant de valeur.

Fonction

verticalTraversal(root: integer-array) → integer-2d-array
rootinteger-array
l’arbre en ordre de tas, avec -1 pour une place vide
Renvoieinteger-2d-array
une liste de valeurs par colonne, en commençant par la colonne la plus à gauche, de haut en bas

Contraintes

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

Exemples

Entrée
root = [5, 2, 9, 4, 7, 1, 6]
Sortie
[[4], [2], [5, 1, 7], [9], [6]]
Explication
La colonne 0 contient la racine 5, puis 7 et 1 deux niveaux plus bas. Ces deux nœuds partagent la même colonne et la même profondeur, donc 1 vient avant 7, même si 7 est plus à gauche.
challenge icon

Pour aller plus loin

Chaque valeur est au plus égale à 5000. Peux-tu utiliser cette information pour éliminer le tri par comparaison et terminer en O(n + 5000) ?

Réinitialiser le code
def verticalTraversal(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, 1, 7], [9], [6]]