仅使用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) - 调用辅助函数从根节点启动遍历,返回完整的前序遍历结果列表
- 保持原方法签名不变(仅接收
原代码的问题分析
- 参数不匹配:错误地将
Node实例传给preorder_tree_walk,但该方法只能接收AVLTree实例的self参数 - 缩进错误:
if self.root.left的缩进层级错误,与print(self.root.val)不在同一代码块 - 遍历逻辑错误:将右子树的判断嵌套在左子树的判断中,导致只有存在左子树时才会检查右子树,不符合前序遍历逻辑
内容的提问来源于stack exchange,提问作者zburner
相关产品推荐
相关产品推荐

