Python实现递归二叉树中序遍历遇‘maximum recursion depth exceeded’错误
解决二叉树递归中序遍历的递归深度超出错误
你贴出的测试代码里的二叉树深度仅为3,远小于Python默认的递归深度限制(默认是1000),不会触发maximum recursion depth exceeded错误。出现这个问题的核心原因大概率是你实际运行时使用的二叉树存在循环引用(比如节点的左/右指针指向了祖先节点,导致递归无限循环),或者是树的深度极深(比如链式结构的树,深度超过1000)。
对应解决方法:
- 检查二叉树结构:排查是否存在节点的left/right指针错误指向父节点或上层节点的情况,避免递归时出现无限循环。
- 改用迭代版中序遍历:如果是树的深度超过递归限制,用栈模拟递归过程的迭代写法可以彻底解决这个问题,代码实现如下:
class TreeNode: def __init__(self, val=0, left=None, right=None): self.val = val self.left = left self.right = right def inorder_traversal(root): result = [] stack = [] current = root while current or stack: # 遍历到最左节点 while current: stack.append(current) current = current.left # 弹出栈顶节点,记录值 current = stack.pop() result.append(current.val) # 处理右子树 current = current.right return result # 测试用例 root = TreeNode(1) root.left = TreeNode(2) root.right = TreeNode(3) root.left.left = TreeNode(4) root.left.right = TreeNode(5) print(inorder_traversal(root)) # 输出: [4, 2, 5, 1, 3]
- 临时调高递归深度(不推荐):如果只是临时需要,可通过
sys模块调整递归限制,但这可能引发系统栈溢出风险,仅适合深度稍超默认限制的场景:
import sys sys.setrecursionlimit(2000) # 调高到2000
内容的提问来源于stack exchange,提问作者pvpb0t
相关产品推荐
相关产品推荐

