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

使用deque判断二叉树相同时遇TypeError:无法解包TreeNode对象

问题分析与解决

你遇到的TypeError: cannot unpack non-iterable TreeNode object错误,核心原因是初始化双端队列时的元素结构错误。

错误根源

你初始化deque([p, q])时,队列里会存入两个独立的TreeNode对象:第一个是p,第二个是q。当执行n1, n2 = q.popleft()时,第一次取出的是单个TreeNode(也就是p),尝试把它解包成两个变量,自然会报错——因为TreeNode不是可迭代对象,无法拆分。另外原代码里方法参数q和队列变量q重名,会覆盖参数值,也是隐藏的逻辑隐患。

修正后的代码

正确的做法是把成对的节点作为一个整体(元组或列表)存入队列:

from collections import deque

def iterative(self, p, q):
    # 初始化时存入一个包含两个节点的元组,同时避免变量名冲突
    queue = deque([(p, q)])
    while queue:
        n1, n2 = queue.popleft()
        if not n1 and not n2:
            continue
        elif not n1 or not n2:
            return False
        else:
            if n1.val != n2.val:
                return False
            # 同样将左右节点对作为整体存入队列
            queue.append((n1.left, n2.left))
            queue.append((n1.right, n2.right))
    return True

关键修正点

  • 队列元素结构:将[p, q]改为[(p, q)],确保队列的每个元素都是包含两个节点的可迭代对象(元组/列表)
  • 变量名优化:把队列变量从q改为queue,避免覆盖方法入参的q,防止逻辑混乱

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.01 19:22:38