使用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
相关产品推荐
相关产品推荐

