2014-12-10 3 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)

문제

나무 = 노드 : 나는 트리의 루트에 대한 새로운 인스턴스를 생성.

<__main__.Node object at 0x10f6e5210> 

누군가가 실제로 트리를 인쇄하는 함수를 만들 필요가 말해 줬어이 기능은 새로운 노드를 생성하지만, 지금까지 내가 '년후 것 기능과 같습니다 : 난 그냥 print Tree을 말한다면, 나는이를 얻을 수 할 수있는 능력. 어떤 도움을주십시오!

+0

'add_node()'메소드와 비슷하게 보이는 단서는 아마도 재귀 적이라는 사실을 언급했을 것입니다. 트리 인쇄는 왼쪽 및 오른쪽 하위 트리를 인쇄하는 것으로 구성됩니다. – martineau

답변

1

사용하여 인쇄 할 수 있습니다. 이것은 메소드를 직접 호출하지 않고 print 서술문 등에서 문자열 표현을 제공하려는 경우에 유용합니다.

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__()입니다. 리턴 된 문자열은 동일한 값을 가진 오브젝트를 재 작성하는 데 사용할 수있는 유효한 파이썬 표현식이어야합니다.

자세한 내용은 language reference을 참조하십시오.

+0

나는 당신의 대답을 upvoted했지만 내 의견으로는'__unicode__'와'__repr__'에 대해서도 말해야한다. –

+0

그렇게하는 것이 상처가 될 수 없다는 것을 알았습니다. 편집 됨. – runDOSrun

0

예 노드에서 값이 print 인 함수를 만드는 함수를 추가해야합니다. 이 기능은 간단

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

수 있습니다 그리고 당신은 지금 당신은 문자열로 사용하는 경우 노드 객체가 어떻게 반응하는지 즉 str(Node(6))을 결정하기 위해 __str__ 방법을 추가 할 수 있습니다

print (Tree.disp())