Menu
CoddyTech

Construct Binary Tree from Preorder and Inorder Traversal

Vous disposez de deux tableaux, preorder et inorder, qui répertorient les valeurs distinctes du même arbre binaire. Le parcours préfixe visite un nœud, puis son sous-arbre gauche, puis son sous-arbre droit. Le parcours infixe visite le sous-arbre gauche, puis le nœud, puis le sous-arbre droit.

Reconstruisez l’arbre et renvoyez-le sous forme de tableau en ordre par niveaux : la racine à l’indice 0, les enfants de l’indice i aux indices 2i+1 (gauche) et 2i+2 (droit), et -1 pour chaque emplacement vide. Le tableau se termine au dernier nœud, sans -1 final.

Fonction

buildTree(preorder: integer-array, inorder: integer-array) → integer-array
preorderinteger-array
les valeurs en préordre : nœud, sous-arbre gauche, sous-arbre droit
inorderinteger-array
les valeurs dans l’ordre infixe : sous-arbre gauche, nœud, sous-arbre droit
Renvoieinteger-array
l’arbre dans l’ordre par niveau, avec -1 pour les emplacements vides et sans -1 final

Contraintes

  • 1 ≤ preorder.length ≤ 3000
  • inorder.length == preorder.length
  • 0 ≤ preorder[i] ≤ 104, et toutes les valeurs sont distinctes.
  • inorder contient les mêmes valeurs, et les deux tableaux décrivent le même arbre binaire.
  • La profondeur de l’arbre est au plus 14, donc tous les indices de la réponse sont inférieurs à 214-1 = 16383.

Exemples

Entrée
preorder = [7, 3, 0, 9, 4, 6]inorder = [0, 3, 9, 7, 4, 6]
Sortie
[7, 3, 4, 0, 9, -1, 6]
Explication
Le parcours préfixe commence par la racine, 7. Elle se trouve à la position 3 dans inorder, donc 0, 3, 9 vont à gauche et 4, 6 vont à droite. 4 n’a qu’un enfant droit, 6, donc l’index 5 reste -1.
challenge icon

Pour aller plus loin

Peux-tu reconstruire l’arbre sans récursion, en un seul parcours de preorder avec une pile explicite ?

Réinitialiser le code
def buildTree(preorder, inorder):
    # Écrivez le code ici

Test #1

Test #2

Arguments

preorder = [7, 3, 0, 9, 4, 6]
inorder = [0, 3, 9, 7, 4, 6]

Résultat attendu

[7, 3, 4, 0, 9, -1, 6]