我想创建一个交互式二进制搜索树(BST)。因此,我使用以下代码创建了BST
class BTreeNode(object):
def __init__(self, data):
self.data = data
self.rChild = None
self.lChild = None
def __str__(self):
return (self.lChild.__str__() + '<-' if self.lChild != None
else '') + self.data.__str__() + (
'->' + self.rChild.__str__() if self.rChild != None else '')
# Insert method to create nodes
def insert(self, btreeNode):
if self.data > btreeNode.data: # insert left
if self.lChild == None:
self.lChild = btreeNode
else:
self.lChild.insert(btreeNode)
else: # insert right
if self.rChild == None:
self.rChild = btreeNode
else:
self.rChild.insert(btreeNode)
# Insert method to create nodes
# findval method to compare the value with nodes
def findval(self, lkpval):
if lkpval < self.data:
if self.lChild.data is None:
return str(lkpval)+" Not Found"
return self.lChild.findval(lkpval)
elif lkpval > self.data:
if self.rChild.data is None:
return str(lkpval)+" Not Found"
return self.rChild.findval(lkpval)
else:
print(str(self.data) + ' is found')
# findval method to compare the value with nodes
def display():
btreeRoot = BTreeNode(5)
print('inserted %s:' % 5, btreeRoot)
btreeRoot.insert(BTreeNode(7))
print('inserted %s:' % 7, btreeRoot)
btreeRoot.insert(BTreeNode(3))
print('inserted %s:' % 3, btreeRoot)
btreeRoot.insert(BTreeNode(1))
print('inserted %s:' % 1, btreeRoot)
# print(btreeRoot.findval(3))
print(display())
如果执行上述代码,我将获得以下交互式输出为
插入5:5
插入7:5-> 7
插入3:3 <-5-> 7
已插入1:1 1 <-3 <-5-> 7
这是我的预期输出,我明白了。另外,我想从BST中找到一个值。所以我在显示功能中使用了以下代码作为
# print(btreeRoot.findval(3))
如果我取消注释代码,则会出错。因此,如何修改我的代码以显示BST中是否存在3?谢谢。
答案 0 :(得分:1)
执行检查"default_icon":
和fs.write
时会发生问题。这些行应分别用if self.lChild.data is None
和if self.rChild.data is None
替换,因为您的班级暗示那些属性是if self.lChild is None
的属性,而不是它们的if self.rChild is None
属性。
也可以考虑使用None
代替data
。在这种情况下,这不是什么大问题,但在其他情况下可能会引起麻烦。请在此处查看详细信息:Python None comparison: should I use "is" or ==?