Comment pouvez-vous convertir Binary Tree Binary arbre de recherche avec O (1) espace supplémentaire?
arbre binaire à binaire arbre de recherche (BST)
Conversion d'un arbre binaire dans un arbre non ordonnée de recherche binaire commandé est trivial, mais un peu plus difficile à faire vite.
Voici une implémentation naïve qui devrait satisfaire vos critères, je ne vais pas décrire les étapes réelles à prendre, juste l'algorithme général.
- Prenez un nœud feuille au hasard à partir de votre arbre existant
- Délier le noeud feuille de votre arbre existant
- Faire le nœud la racine de votre nouvel arbre de recherche binaire
- Prenez un autre nœud de feuille au hasard de votre arbre existant
- Délier ce nœud de votre arbre existant
- Trouver le bon endroit pour et relier le nœud, dans votre nouvel arbre de recherche binaire
- Répétez l'étape 4-6 jusqu'à ce que l'arbre original est vide
Vous devez exiger que quelques variables, comme le parent du nœud feuille vous déliant (à moins que les noeuds a parents- liens), le nœud racine du nouvel arbre, et deux variables temporaires, le tout dans votre O (1 ) critères d'espace.
Cela ne produira pas un arbre binaire de recherche optimale. Pour cela, vous devez soit trier les noeuds avant de les ajouter, et en les ajoutant dans l'ordre, ou utiliser un arbre de recherche binaire équilibre, comme un arbre rouge-noir ou un arbre évasement.
Convertir Arbre binaire à un liste- doublement lié peut être fait inplace en O (n) puis trier trier en utilisant la fusion, nlogn Convertir la liste de retour à un arbre - O (n)
Une solution simple nlogn.













