如何修复TreeNode二叉树转元组的tree_to_tuple函数UnboundLocalError报错
报错根因
原tree_to_tuple函数存在3个核心逻辑缺陷:
- 未处理
node is None的递归终止场景,遍历到空节点时直接进入后续分支逻辑 - 分支判断覆盖不全,
node_left/node_mid/node_right三个变量仅在部分分支中赋值,未覆盖的分支会触发变量未定义报错 - 未匹配
parse_tuple的转换规则:叶子节点(左右子树均为空)在元组中是单个值,原函数统一返回三元组,会导致转换前后格式不一致
修复后代码
def tree_to_tuple(node): # 递归终止:空节点直接返回None if node is None: return None # 递归终止:叶子节点直接返回key,匹配parse_tuple的规则 if node.left is None and node.right is None: return node.key # 非叶子节点递归处理左右子树,组装三元组 left_tuple = tree_to_tuple(node.left) mid_val = node.key right_tuple = tree_to_tuple(node.right) return (left_tuple, mid_val, right_tuple)
运行原测试代码,输出结果和输入的tree_tuple完全一致,转换正确性可以得到验证。
逻辑优化建议
- 增加参数类型校验,传入非
TreeNode且非None的入参时直接抛出明确的参数错误,避免隐式报错 - 二叉树深度超过Python默认递归深度(默认1000)时会触发栈溢出,针对极深的树可以将递归实现改为迭代的深度优先/广度优先遍历实现
- 可以增加转换前后的一致性校验逻辑,转换完成后自动用
parse_tuple解析输出的元组,和原节点比对结构与值是否匹配
内容的提问来源于stack exchange,提问作者Shiva Kharbanda
相关产品推荐
相关产品推荐

