Python二叉搜索树search方法触发TypeError错误如何解决
问题原因
你写的search方法存在两处核心逻辑错误,同时另外两种错误写法本身存在语法问题:
核心错误(对应第一种报错)
- 递归调用的对象和参数完全错误:你需要到左右子树检索目标key,应该调用左右子节点自身的search方法,而非当前节点的search方法;同时search方法的入参是要检索的目标key,不是子节点对象。你原代码中
self.search(self.right)、self.search(self.left)的写法,把Node类型的子节点作为key传入下一层递归,导致下一层递归中int类型的self.key和Node类型的形参key比较,直接触发类型不匹配报错。 - 递归调用未返回结果:即使修正了调用逻辑,若不加
return返回递归调用的结果,下层递归的返回值无法传递到上层调用,最终只会得到None。
另外两种报错的原因
- 写
self.key() < key报错:self.key是节点存储的int类型值,不是可调用的函数/方法,加括号相当于尝试调用int对象,自然触发'int' object is not callable错误。 - 写
key(self) < key报错:你传入的目标key本身是int类型,加括号把它当函数调用,同样会触发int不可调用的错误。
修正后的完整search方法
def search(self, key): print("self.key: ", type(self.key), "\n", "key: ", type(key)) if self.key == key: return (True, self) elif self.key < key: if self.right == None: return (False, self) else: # 调用右子节点的search方法,传入目标key,返回递归结果 return self.right.search(key) elif self.key > key: if self.left == None: return (False, self) else: # 调用左子节点的search方法,传入目标key,返回递归结果 return self.left.search(key)
内容的提问来源于stack exchange,提问作者BCBugajski
相关产品推荐
相关产品推荐

