2017-05-29 22 views
0

私はBSTを実装する次のコードを持っています。しかし、insert関数を呼び出すことで要素を挿入しようとすると、10と15が出力されます。提案/修正を提供できるのは誰ですか?バイナリ検索ツリー:挿入操作

class Node: 
    def __init__(self,val): 
     self.rightchild = None 
     self.leftchild = None 
     self.root = None 
     self.value=val 

    def insert(self,data): 
     if self.value == data: 
      return False 

     elif self.value > data: 
      if self.leftchild: 
       return self.leftchild.insert(data) 
      else: 
       self.leftchild = Node(data) 
       return True 
     else: 
      if self.rightchild: 
       return self.rightchild.insert(data) 
      else: 
       self.rightchild = Node(data) 
       return True 

    def find(self,data): 
     if self.value == data: 
      return True 
     elif self.value > data: 
      if self.leftchild: 
       return self.leftchild.find(data) 
      else: 
       return False 
     else: 
      if self.rightchild: 
       return self.rightchild.find(data) 
      else: 
       return False 

    def inorder(self):   
     if self.root: 
      return self.leftchild.inorder() 
     print(str(self.value)) 
     if self.rightchild: 
      return self.rightchild.inorder() 

class BST:  
    def __init__(self): 
     self.root=None 

    def insert(self,data): 
     if self.root: 
      return self.root.insert(data) 
     else: 
      self.root = Node(data) 
      return True 

    def find(self,data): 
     if self.root: 
      return self.root.find(data) 
     else: 
      return False 

    def inorder(self): 
     if self.root: 
      self.root.inorder() 

bst = BST() 
bst.insert(10)) 
bst.insert(5) 
bst.insert(15) 
bst.insert(8) 
bst.inorder() 

答えて

1

Node#inorderには、タイプミスがあります。最初の行を読む必要があります

if self.leftchild: 

また、あなたは途中で返されます。 returninorderに入れないでください。この方法は印刷であり、何も計算していないためです。書き直し:

$ python3 bst.py 
5 
8 
10 
15 
+0

グレート:これらの修正を行った後

def inorder(self): if self.leftchild: self.leftchild.inorder() print(str(self.value)) if self.rightchild: self.rightchild.inorder() 

、私が期待される答えを得ることができました!ありがとう:) – spunkyquagga

関連する問題