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

仅使用self参数实现AVL树前序遍历的技术求助

解决方法

核心思路是借助类内部的递归辅助函数实现遍历——因为preorder_tree_walk方法被限制只能接收self参数,无法直接传入子节点,让辅助函数处理节点遍历逻辑即可。

修正后的代码

AVL类完整实现(含修正的前序遍历)

class AVLTree:
    class Node:
        def __init__(self, val):
            ####################    DO NOT CHANGE THIS   ####################
            self.val = val
            self.left = None
            self.right = None
            self.height = 0

    def __init__(self, root=None):
        ####################    DO NOT CHANGE THIS   ####################
        self.root = root

    def preorder_tree_walk(self) -> list:
        # 定义递归辅助函数,负责遍历指定节点及其子树
        def _preorder(node):
            result = []
            if node:
                # 前序遍历:根节点 -> 左子树 -> 右子树
                result.append(node.val)
                result.extend(_preorder(node.left))
                result.extend(_preorder(node.right))
            return result
        
        # 从根节点开始遍历,返回结果列表
        return _preorder(self.root)

代码说明

  • 辅助函数_preorder:
    • 接收Node类型参数,递归遍历该节点的左、右子树
    • 严格遵循前序遍历规则:先收集当前节点值,再递归左子树,最后递归右子树
    • 用列表收集遍历结果,方便后续使用(若需要直接打印,可在返回结果后循环输出)
  • 原方法preorder_tree_walk:
    • 保持原方法签名不变(仅接收self)
    • 调用辅助函数从根节点启动遍历,返回完整的前序遍历结果列表

原代码的问题分析

  1. 参数不匹配:错误地将Node实例传给preorder_tree_walk,但该方法只能接收AVLTree实例的self参数
  2. 缩进错误:if self.root.left的缩进层级错误,与print(self.root.val)不在同一代码块
  3. 遍历逻辑错误:将右子树的判断嵌套在左子树的判断中,导致只有存在左子树时才会检查右子树,不符合前序遍历逻辑

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.10 00:05:17