2014-12-10 304 views
1

我剛開始使用Python中的類工作,我在試圖打印我創建的二叉樹的路障。這裏是我的代碼:打印二叉樹

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函數在樹中添加一個節點。我創建了一個新的實例爲樹的根:

樹=節點(6)

,我面對正在打印樹中的問題。如果我只是說print Tree,我得到這個:

<__main__.Node object at 0x10f6e5210> 

有人告訴我,我必須創建一個函數來實際打印樹,這個功能看起來像是一個創建一個新的節點,但到目前爲止,我沒」功能能夠做到這一點。任何幫助嗎?!

+0

看起來像'add_node()'方法的線索可能是指它也是遞歸的 - 例如,打印樹將包括打印左側和右側的子樹。 – martineau 2014-12-10 22:53:23

回答

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) 

編輯:

雖然__str__()返回字節,__unicode__()返回字符。 __unicode__()實際上應該取代__str__(),所以實際上建議使用__unicode__()來代替(在Python 2.x中,這兩者都是出於兼容性原因)。

表示對象的第三種方法是__repr__(),它用於不太正式的字符串表示,但用於調試等。返回的字符串應該看起來像一個有效的Python表達式,可用於重新創建具有相同值的對象。

欲瞭解更多信息,看看language reference

+0

我已經upvoted你的答案,但你也應該說'__unicode__'和'__repr__'在我看來。 – 2014-12-10 21:46:24

+0

認爲它不會傷害這樣做。編輯。 – runDOSrun 2014-12-10 22:01:10

0

是的,你需要添加一個函數來創建一個函數,以print這個節點的值。該功能可以簡單的

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

,您現在可以使用

print (Tree.disp())