You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.29 11:06:03