leetcode 2096。一步步从一棵二叉树到另一棵二叉树。
此解决方案来自 Youtube,适用于他们。为什么这种事会发生在我身上?谁能告诉我为什么?
class Solution(object):
def getDirections(self, root, startValue, destValue):
def lca(node,p,q):
if not node:
return None
if node.val == p or node.val==q:
return node
l = lca(node.left,p,q)
r = lca(node.right,p,q)
if l and r:
return node
else:
return l or r
get_lca = lca(root,startValue,destValue)
q = collections.deque((get_lca,""))
count_setp = 0
despath = ""
while q:
node, path = q.popleft()
if node.val == startValue:
count_setp = len(path)
if node.val == destValue:
despath = path
if node.left:
q.append((node.left,path+"L"))
if node.right:
q.append((node.right,path+"R"))
return 'U'*count_setp + despath
它在 (node, path = q.popleft()) 行上弹出 (TypeError: 'TreeNode' object is not iterable) 错误 当我运行代码时。
您没有正确初始化双端队列。构造函数需要一个可迭代的对象,您已经给出了该对象,但您希望有一个带有 one 元素的队列,该元素是一个元组,但该元组被迭代,导致双端队列中出现 two 条目:一个节点和一个空字符串。
然后当执行
popleft
时,弹出一个节点,显然不能将其元组分配给两个名称。
所以改为:
q = collections.deque([(get_lca,"")])