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

如何修复列表转BST时Tree对象值丢失问题?

问题修复方案

以下是针对你代码问题的修复,同时保留convert作为Tree类方法:

核心问题分析

  1. insert方法未定义为静态方法:直接通过Tree.insert()调用时,Python会将其视为实例方法并期望self参数,导致参数错误。
  2. convert方法中重新赋值self无效:在方法内对self的赋值只会修改局部变量,不会改变原始调用实例的属性。
  3. 未接收convert方法的返回值:原代码中convert返回了新构建的树,但未将其赋值回tree变量,导致原始空实例未被更新。

修复版本1:修改当前实例属性

此版本让convert直接修改调用它的实例,无需重新赋值:

class Tree:
    def __init__(self, key=None):
        self.left = None
        self.right = None
        self.key = key

    @staticmethod
    def insert(key):
        return Tree(key)

    def convert(self, lst):
        # 清空当前节点初始值
        self.key = None
        self.left = self.right = None
        
        if not lst:
            return self
        
        mid = len(lst) // 2
        # 设置当前节点的key为列表中间元素
        self.key = lst[mid]
        
        # 构建左子树(如果左侧有元素)
        if mid > 0:
            self.left = Tree().convert(lst[:mid])
        # 构建右子树(如果右侧有元素)
        if len(lst) > mid + 1:
            self.right = Tree().convert(lst[mid+1:])
        
        return self

# 测试代码
int_list = [1,2,3]
tree = Tree()
tree.convert(int_list)

print(tree.key)      # 输出:2
print(tree.left.key) # 输出:1
print(tree.right.key)# 输出:3

修复版本2:返回新树实例

此版本保留convert返回新树的逻辑,需将返回值赋值回变量:

class Tree:
    def __init__(self, key=None):
        self.left = None
        self.right = None
        self.key = key

    @staticmethod
    def insert(key):
        return Tree(key)

    def convert(self, lst):
        if not lst:
            return None
        
        mid = len(lst) // 2
        root = Tree.insert(lst[mid])
        root.left = Tree().convert(lst[:mid])
        root.right = Tree().convert(lst[mid+1:])
        
        return root

# 测试代码
int_list = [1,2,3]
tree = Tree()
tree = tree.convert(int_list) # 将返回的新树赋值回tree变量

print(tree.key)      # 输出:2
print(tree.left.key) # 输出:1
print(tree.right.key)# 输出:3

内容的提问来源于stack exchange,提问作者Amaan

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.15 23:55:26