imprimer arbre binaire de niveau par niveau en python
Je veux imprimer mon arbre binaire de la manière suivante:
10
6 12
5 7 11 13
J'ai écrit du code pour l'insertion de nœuds, mais ne peut pas en mesure d'écrire pour l'impression de l'arbre. donc, s'il vous plaît aider sur ce point . Mon code est :
class Node:
def __init__(self,data):
self.data=data
self.left=None
self.right=None
self.parent=None
class binarytree:
def __init__(self):
self.root=None
self.size=0
def insert(self,data):
if self.root==None:
self.root=Node(data)
else:
current=self.root
while 1:
if data < current.data:
if current.left:
current=current.left
else:
new=Node(data)
current.left=new
break;
elif data > current.data:
if current.right:
current=current.right
else:
new=Node(data)
current.right=new
break;
else:
break
b=binarytree()
- Vous pouvez ajouter une méthode à votre
Node
classe qui compte compte combien de fois vous pouvez retourner un parent avant de vous obtenezNone
ou votre racine.
Vous devez vous connecter pour publier un commentaire.
Cela a un homeworky de son à elle, et si elle l'est, vous devriez le mentionner. Cependant, il est encore une question légitime.
Ce que vous cherchez est largeur de la première traversée de l', qui vous permet de parcourir un arbre de niveau par niveau. Fondamentalement, vous utilisez une file d'attente de garder une trace des nœuds que vous avez besoin pour visiter, ajouter des enfants à la retour de la file d'attente que vous allez (au lieu de les ajouter à la avant d'une pile). Obtenir que le travail d'abord.
Après vous le faites, alors vous pouvez comprendre comment beaucoup de niveaux de l'arbre a (
log2(node_count) + 1
) et de l'utiliser pour estimer les espaces. Si vous souhaitez obtenir de l'espace exactement droit, vous pouvez utiliser d'autres structures de données pour garder une trace de la façon dont de nombreux espaces vous avez besoin par niveau. Une smart estimation en utilisant le nombre de nœuds et les niveaux devrait être suffisant, mais.Voici ma tentative, en utilisant la récursivité, et garder une trace de la taille de chaque nœud et la taille des enfants.
Exemple de sortie:
J'ai amélioré Prashant Shukla répondre pour imprimer les nœuds sur le même niveau dans la même ligne, sans espace.
current_level
qui est remplacé dans lefor
boucle sur les éléments decurrent_level
! Pouvez-vous expliquer comment ce bout de code fonctionne?La même question est posée sur ici Cela peut aider à code suivant apparaîtra à l'impression dans ce format
Code est comme ci-dessous :
Édité code donne suite dans ce format :
C'est juste un truc de chemin à faire ce que vous voulez leur peut-être une bonne méthode pour que je vous suggère de creuser plus en elle.