2011-08-14 10 views
0

なぜこのpythonプログラムを正しく実行できないのですか?私はバイナリツリーを構築して、それを事前予約でトラバースしたいと考えています。 PreOrderメソッドを呼び出すと、何も返されません。Pythonはバイナリツリーのプリオーダメソッドを実装しています

class Node: 
    def __init__(self, data=None, left=None, right=None): 
     self.left = left 
     self.right = right 
     self.data = data 

class BTree: 
    def __init__(self, root): 
     self.root = root 

    def CreateTree(self, root): 
     self.root.data = raw_input("Enter data,'*' means empty: ") 
     if self.root.data == '*': 
      return 
     self.root.left = Node() 
     self.root.right = Node() 
     self.CreateTree(self.root.left) 
     self.CreateTree(self.root.right) 

    def PreOrder(self, root): 
     if self.root != None: 
      if self.root.data != '*': 
       print self.root.data, 
       PreOrder(self, self.root.left) 
       PreOrder(self, self.root.right) 

if __name__ == '__main__': 
    t = Node() 
    bt = BTree(t) 
    bt.CreateTree(t) 
    bt.PreOrder(t) 

答えて

3

PreOrderクラスBTreeの方法で、あなたはそうのような、再帰呼び出しを変更することができます:あなたがある場合

def PreOrder(self): 
    if self.root != None: 
     if self.root.data != '*': 
      print self.root.data, 
      self.root.left.PreOrder() 
      self.root.right.PreOrder() 

あなたはまた、CreateTreerootを渡す必要はありませんあなただけは__init__私はあなたがあなたのCreateTree方法を見て

0

に保存されたself.rootを使用して、あなたは決して使用しないことを、わかりますrootため、self.root.dataは常に*になります。これを修正すれば、コードにはさらに多くの問題があり、すべてselfとスコープに関連しています。 thisにチェックしてください。

0

お客様のCreateTreeメソッドには、パラメータrootはまったく記載されていません。このメソッドは常にself.rootで動作します。このような

何かが動作することがあります。

def CreateTree(self, current_node): 
    current_node.data = raw_input("Enter data,'*' means empty: ") 
    if current_node.data == '*': 
     return 
    current_node.left = Node() 
    current_node.right = Node() 
    self.CreateTree(current_node.left) 
    self.CreateTree(current_node.right) 
0

あなたはこのself.root.data = raw_input("Enter data,'*' means empty: ") を行うことによってCreateTree機能でself.root.data = '*'を設定しているので。入力プロンプトを終了するには、最後に'*'と入力する必要があります。したがって、self.root.dataの最後の値は '*'です。

はそれが間違っていた場所を知るためにこの

print self.root.data 
    root.data = raw_input("Enter data,'*' means empty: ") 
    print self.root.data 
    if root.data == '*': 
     return 

この

def CreateTree(self,root): 
     print self.root.data 
     root.data = raw_input("Enter data,'*' means empty: ") 
     print self.root.data 
     if root.data == '*': 
      return 
     self.root.left = Node() 
     self.root.right = Node() 
     self.CreateTree(self.root.left) 
     self.CreateTree(self.root.right) 

    def PreOrder(self, root): 
     print root 
     print self.root 
     print self.root.data 
     if self.root != None: 
      if self.root.data != '*': 
       print self.root.data, 
       PreOrder(self, self.root.left) 
       PreOrder(self, self.root.right) 
      else: 
       print 'what the hell' 

if __name__ == '__main__': 
    t = Node(10,Node(),Node()) 
    print t.data 
    bt = BTree(t) 
    bt.CreateTree(t) 
    bt.PreOrder(t) 

を試してみてください。

関連する問題