i具有以下实现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()
在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