2017-05-29 90 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