python - 尝试在 python 中构建二叉搜索树时输入错误
问题描述
我正在尝试构建 BST,但是当我尝试运行程序时出现以下错误:
TypeError: 'method' object is not iterable
我不确定为什么会发生这种情况,因为我认为 in_order_traversal 方法将是 BST 类的一个属性。下面是我的代码。
class BST:
def __init__(self,data):
self.data = data
self.left = None
self.right = None
#
def add_child(self,data):
if data == self.data: #check if value already exists in tree
return
if data <self.data: #should go on the left side then
if self.left: #check if left tree has a value
self.left.add_child(data) #if it has a value, use add_child method to add another child to the left
else: #if it does not have a value
self.left = BST(data)
else:
if self.right:
self.right.add_child()
else:
self.right = BST(data) #if there is no right tree, init a new right tree with data
#visit left, root then right
def in_order_traversal(self):
elements = []
if self.left:
elements += self.left.in_order_traversal()
elements.append(self.data) #append the root
if self.right:
elements += self.right.in_order_traversal
return elements
def build_tree(data):
root = BST(data[0])
for i in range(1,len(data)):
root.add_child(data[i])
return root
if __name__ == '__main__':
numbers = [12,3,1,20]
numbers_tree = build_tree(numbers)
print(numbers_tree.in_order_traversal())
解决方案
def in_order_traversal(self):
elements = []
if self.left:
elements += self.left.in_order_traversal()
elements.append(self.data)
if self.right:
elements += self.right.in_order_traversal() #CHANGE
return elements
您实际上忘记在in_order_traversal
方法后写括号,这导致了错误。
推荐阅读
- python - 在scrapy python中使用非类标签进行选择
- c++ - 为什么我的计时持续时间没有显示正确的值?
- asp.net-mvc - ASP.NET Core MVC:包含 %2F(正斜杠)的路由参数存在问题
- docker - traefik 不遵守前端规则
- c++ - 当我可以使用 BidirectionalIterator 或 RandomAccessIterator 实现相同的目标时,为什么要使用 ForwardIterator
- sql - 在后台刷新 Access VBA 中的表?
- python - 将熊猫矩阵转换为字符串时如何避免“...”?
- python - Python:如何将打印输出重定向到 txt 文件?
- excel - 复制范围,包括从网站到电子邮件的形状
- python-3.x - 具有当前数据库版本设置的“oracle”方言不支持空插入