2017-05-29 185 views
0

我有以下代碼實現BST。但是當我嘗試通過調用插入函數插入元素時,它只打印出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: 

另外,您正在提前返回。 inorder中不要return,因爲這種方法是打印,不計算任何東西。改寫爲:

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

做出這些修訂後,我能得到預期的答案:

$ python3 bst.py 
5 
8 
10 
15 
+0

太好了!謝謝 :) – spunkyquagga