2014-12-10 5 views
1

Я только начал работать с классами на Python, и я нахожусь на roadblock, пытаясь напечатать созданное мной двоичное дерево. Вот код, у меня есть:Печать двоичного дерева

class Node(object): 
    def __init__(self, number): 
     self.number=number 
     self.right=None 
     self.lef=None 

    def add_node(self,number): 
     if number < self.number: 
      self.left = self.left.add_node(number) 
     if number > self.number: 
      self.right = self.right.add_node(number) 

Первая часть представляет корень дерева и функции add_node добавляет узел в дереве. Я создал новый экземпляр для корня дерева:

Tree = Node (6)

Проблема, с которой я столкнулся в печати дерева. Если я просто скажу print Tree, я получаю это:

<__main__.Node object at 0x10f6e5210> 

Кто-то сказал мне, что я должен создать функцию, чтобы фактически напечатать дерево и эта функция выглядит как функция, которая создает новый узел, но до сих пор я не был» это можно сделать. Любая помощь, пожалуйста!

+0

Ключ, который выглядит как метод 'add_node(), вероятно, имел в виду тот факт, что он также будет рекурсивным - например, печать дерева будет состоять в печати левого и правого поддеревьев. – martineau

ответ

1

Вы можете добавить метод __str__, чтобы определить, как ваш объект узел реагирует, когда используется в качестве строки, т.е. str(Node(6)). Это полезно, если вы хотите выдавать строковые представления в операциях печати и т. Д., Не вызывая непосредственно методы.

class Node(object): 
    def __init__(self, number): 
     self.number=number 
     self.right=None 
     self.lef=None 

    def add_node(self,number): 
     if number < self.number: 
      self.left = self.left.add_node(number) 
     if number > self.number: 
      self.right = self.right.add_node(number) 

    def __str__(self): 
     return str(self.number) 

print Node(6) 

Edit:

В то время как __str__() возвращает байт, __unicode__() возвращает символы. __unicode__() фактически должен заменить __str__(), поэтому на самом деле рекомендуется использовать вместо него __unicode__() (в Python 2.x есть оба варианта совместимости).

3-й способ представления вашего объекта - __repr__(), который используется для менее формальных строковых представлений, а скорее для отладки и т. Д. Возвращенная строка должна выглядеть как допустимое выражение Python, которое может быть использовано для воссоздания объекта с тем же значением.

Для получения дополнительной информации см. language reference.

+0

Я одобрил ваш ответ, но вы также должны сказать о '__unicode__' и' __repr__', на мой взгляд. –

+0

Понял, что это не помешает сделать это. Ред. – runDOSrun

0

Да, вам нужно добавить функцию для создания функции в print значение в узле. Эта функция может быть столь же просто, как

def dis(self): 
    print(self.number) 

И теперь вы можете печатать с помощью

print (Tree.disp()) 
Смежные вопросы