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

如何借助preorder()和inorder()方法展示Python实现的BST?

解决BST遍历方法调用的参数错误问题

核心问题分析

你遇到的参数数量错误,本质是遍历方法(preorder/inorder)需要起始节点才能执行,但调用时未传递这个必要参数,结合作业约束,需调整调用逻辑与方法定义的匹配性。

修正方案

1. 方法定义的正确逻辑

preorder和inorder不能用self,但必须接收node参数作为遍历起始点(这是二叉树遍历的核心要求,作业约束未禁止接收此类参数)。同时BST类需维护根节点的实例属性(如self.root),这是二叉树类的常规设计,不属于违规。

2. 修正后的代码示例

class BST:
    def __init__(self):
        self.root = None  # 保存树的根节点,必备

    # 遍历方法接收node参数,无需self
    def preorder(node):
        if node is None:
            return []
        # 前序遍历:根 -> 左 -> 右
        return [node.value] + BST.preorder(node.left) + BST.preorder(node.right)

    def inorder(node):
        if node is None:
            return []
        # 中序遍历:左 -> 根 -> 右
        return BST.inorder(node.left) + [node.value] + BST.inorder(node.right)

    # display方法不能加额外参数,用self访问根节点
    def display(self):
        # 用lambda封装遍历方法的调用,传入根节点参数
        show_traversal = lambda f: print(f(self.root))
        
        print("前序遍历结果:")
        show_traversal(BST.preorder)
        print("中序遍历结果:")
        show_traversal(BST.inorder)

3. 若遍历方法直接打印节点值

如果preorder/inorder是直接打印节点内容,调整如下:

def preorder(node):
    if node is not None:
        print(node.value, end=" ")
        BST.preorder(node.left)
        BST.preorder(node.right)

def display(self):
    print("\n前序遍历:")
    show_traversal = lambda f: f(self.root)
    show_traversal(BST.preorder)
    
    print("\n中序遍历:")
    show_traversal(BST.inorder)

关键注意点

  • 作业约束的"不能使用self"指方法不需要self参数,而非禁止接收遍历必需的node参数;
  • display作为实例方法,本身可通过self访问实例的根节点,这不属于违反"不能添加参数"的约束(约束指不能给display加额外自定义参数);
  • lambda调用时必须传递self.root给遍历方法,补全必要参数,才能解决参数数量不匹配的错误。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.12 10:16:11