Sérialiser et désérialiser l'arbre binaire
Guide détaillé et implémentation de Python pour le problème « Sérialiser et désérialiser l'arbre binaire ».
1. Apprendre
Le problème « Sérialiser et désérialiser l'arbre binaire » est un défi clé dans la section Arbres.
Cette implémentation se concentre sur la logique de niveau moyen dans Python.
Nous accordons la priorité à la précision technique et à la lisibilité du code dans les solutions que nous proposons.
2. Real-World Applications
3. Visual Intuition
Visualisation du flux logique pour sérialiser et désérialiser l'arbre binaire.
4. Prerequisites
5. Step-by-Step Thinking
1. Understand the problem
Lisez attentivement l'énoncé du problème concernant la sérialisation et la désérialisation de l'arbre binaire.
2. Formulate brute force
Rédigez une solution itérative simple.
3. Identify inefficiency
Recherchez les calculs redondants.
4. Optimize search path
Utilisez le hachage ou le tri pour accélérer le processus.
5. Final Implementation
Nettoyer le code pour les normes de production.
Énoncé du problème
La sérialisation est le processus de conversion d'une structure de données ou d'un objet en une séquence de bits afin qu'il puisse être stocké dans un fichier ou une mémoire tampon, ou transmis via une liaison de connexion réseau pour être reconstruit ultérieurement dans le même environnement informatique ou dans un autre.
Concevez un algorithme pour sérialiser et désérialiser un arbre binaire. Il n'y a aucune restriction sur la façon dont votre algorithme de sérialisation/désérialisation doit fonctionner. Vous devez simplement vous assurer qu'un arbre binaire peut être sérialisé en chaîne et que cette chaîne peut être désérialisée en structure arborescente d'origine.
L'arborescence est représentée sous la forme d'une liste par ordre de niveaux. Implémentez deux fonctions :
- serialize(root: list) -> str qui convertit l'arbre en chaîne.
- deserialize(data: str) -> list qui reconvertit la chaîne en arbre.
Pour les tests, implémentez serializeDeserialize(root: list) -> list qui sérialise puis désérialise, renvoyant le résultat.
- •The number of nodes in the tree is in the range [0, 10000]
- •-1000 <= Node.val <= 1000
Exemples
[1,2,3,None,None,4,5]
[1,2,3,None,None,4,5]
The tree is serialized to a string and deserialized back to the same tree structure.
[]
[]
An empty tree serialized and deserialized remains empty.
Need a Hint?
Edge Cases to Watch
- Structures d'entrée vides
- Entrées à élément unique
- Grandes limites numériques
Prêt à résoudre ?
Open the problem in PyRun's browser-based Python editor. Your code runs fully offline — no server required.
Aperçus et variations des entretiens
Répartition de l'analyse de complexité
Pourquoi le temps: Directly evaluates all possibilities.
Pourquoi l'espace: Uses standard local memory.
Pourquoi le temps: Optimized paths reduce total operations.
Pourquoi l'espace: May trade memory for speed.
Code Python de solution optimisée
Code Python de solution optimisée
def serialize_deserialize_opt(root):
if isinstance(root, list):
r = build_tree(root)
s = serialize_opt(r)
new_r = deserialize_opt(s)
return tree_to_list(new_r)
return root
def serialize_opt(root):
if not root: return "None"
return str(root.val) + "," + serialize_opt(root.left) + "," + serialize_opt(root.right)
def deserialize_opt(data):
def solve(nodes):
val = next(nodes)
if val == "None":
return None
node = TreeNode(int(val))
node.left = solve(nodes)
node.right = solve(nodes)
return node
return solve(iter(data.split(",")))Code de force brute (spoiler gardé)
Code de force brute (spoiler gardé)
def serialize_deserialize_brute(root):
if isinstance(root, list):
r = build_tree(root)
s = serialize_brute(r)
new_r = deserialize_brute(s)
return tree_to_list(new_r)
return root
def serialize_brute(root):
if not root: return "None"
return str(root.val) + "," + serialize_brute(root.left) + "," + serialize_brute(root.right)
def deserialize_brute(data):
def solve(nodes):
val = next(nodes)
if val == "None": return None
node = TreeNode(int(val))
node.left = solve(nodes)
node.right = solve(nodes)
return node
return solve(iter(data.split(",")))Algorithm Pattern Checklist
When dealing with Trees data patterns.
- Are constraints clear?
- Is there a linear or logarithmic optimization possible?
Key Revision Notes
Les propriétés du problème des arbres standard s'appliquent.
Questions connexes
PyRun is built and maintained by an independent solo developer. If this helped your interview prep, consider buying a coffee!
Ressources Python recommandées
Développez vos connaissances avec des didacticiels interactifs, des aide-mémoire et des comparaisons de codes associés.
Python Try/Except et gestion des erreurs
Empêchez vos scripts Python de planter. Apprenez à essayer, sauf, enfin les blocs et à déclencher correctement des exceptions personnalisées.
Comment générer des nombres aléatoires en Python
Apprenez à générer des nombres aléatoires en Python. Comparez la génération de randrange, de randint et de flotteur uniforme avec le contrôle d'ensemencement.
Aide-mémoire du gestionnaire de packages Python pip
Guide de référence en ligne de commande pour pip. Apprenez à installer, mettre à niveau, désinstaller et gérer les packages et dépendances Python.
Python vs JavaScript : quel langage de programmation est le meilleur ?
Une comparaison complète entre Python et JavaScript. Explorez les différences de syntaxe, les performances, les cas d'utilisation (backend et frontend) et des exemples de codage.