【发布时间】:2018-12-15 00:40:42
【问题描述】:
我正在尝试实现一个二叉搜索树,但我认为我犯了一个逻辑和语法错误,现在脑子里放屁。
我按照我拥有的伪代码实现了基本操作(我无法重构代码)。到目前为止我已经实现的是类 find、findMax、Insert、Traverse,但是看起来我在某个地方犯了一个逻辑错误,有什么帮助吗?
#!/usr/bin/python3.6
class Node:
def __init__(self, key=None):
self.key = key
self.left = None
self.right = None
class BST:
root = Node()
def find0(self, key):
x = self.find(self.root, key)
return x
# Recusive
def find(self, root, key):
if root is None or key == self.root.key:
return self.root
elif key > self.root.key:
return self.find(self.root.right, key)
else:
return self.find(self.root.left, key)
def findMin0():
FNode = self.findMin(self.root)
return FNode
# Recursive
def findMin(self, root):
if self.root.right is None:
return self.root
else:
return findMin(self.root.left)
def findMax0():
FNode = findMin(self.root)
return FNode
# Recursive
def findMax(self, root):
if self.root.right is None:
return self.root
else:
return findMin(self.root.left)
def insert(self, data):
self.root = self.insertInTree(self.root, data)
def insertInTree(self, root, key):
if root.left is None and root.right is None :
root = Node(key)
return root
elif key < root.key:
root.left = self.insertInTree(root.left, key)
elif key > root.key:
root.right = self.insertInTree(root.right, key)
return root
def traverseInOrder0(self):
self.traverseInOrder(self.root)
def traverseInOrder(self, root):
if root.key is not None:
self.traverseInOrder(root.left)
self.visit(root)
self.traverseInOrder(root.right)
def visit(self, node):
print (node.key)
def getRoot():
return root
def main():
NewTree = BST()
NewTree.insert(100)
NewTree.insert(90)
NewTree.insert(110)
NewTree.traverseInOrder0()
#NewTree.findMin()
if __name__ == "__main__":
main()
截至目前,我可以看到以下错误
Traceback (most recent call last):
File "./bst", line 86, in <module>
main()
File "./bst", line 81, in main
NewTree.traverseInOrder0()
File "./bst", line 61, in traverseInOrder0
self.traverseInOrder(self.root)
File "./bst", line 65, in traverseInOrder
self.traverseInOrder(root.left)
File "./bst", line 64, in traverseInOrder
if root.key is not None:
AttributeError: 'NoneType' object has no attribute 'key'
【问题讨论】:
-
如果你想知道那是递归设计的
-
您没有用于初始化
self.root的BST构造函数。 -
@Barmar 从技术上讲,第一次调用
insert将初始化它(在调用之前,self.root将是类级别的Node,其成员都是None)。跨度>
标签: python algorithm binary-search-tree