TypeError:“TreeNode”对象不可迭代。这是怎么发生的?有人可以帮我吗?

问题描述 投票:0回答:1

leetcode 2096。一步步从一棵二叉树到另一棵二叉树。

enter image description here

此解决方案来自 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) 错误 当我运行代码时。

binary-tree depth-first-search breadth-first-search
1个回答
0
投票

您没有正确初始化双端队列。构造函数需要一个可迭代的对象,您已经给出了该对象,但您希望有一个带有 one 元素的队列,该元素是一个元组,但该元组被迭代,导致双端队列中出现 two 条目:一个节点和一个空字符串。

然后当执行

popleft
时,弹出一个节点,显然不能将其元组分配给两个名称。

所以改为:

    q = collections.deque([(get_lca,"")])
© www.soinside.com 2019 - 2024. All rights reserved.