TypeError:“节点”对象不可迭代

时间:2019-03-25 01:55:31

标签: python

所以我创建了这个节点类,它具有一系列子节点。现在,我想遍历所有子项,以找到所有可能路径中最小的成本/价值总计。我正在应用深度优先搜索策略。但是当我的一个孩子经历了一次互动之后,我收到一个TypeError说“ NodeType不能被迭代”

class Node:
    def __init__(self, cost):
        self.cost= cost
        self.children = None

    def get(self):
        return self.cost

    def findMinPath(self):
        min_val = 10000
        if self.children is None:
            return self.cost
        for child in self.children:
            temp = child.findMinPath()
            if temp<min_val:
                min_val=temp
        return min_val+self.cost

if __name__ =='__main__':
    newnode = Node(0)
    nodeleft= Node(5)
    nodecenter=Node(3)
    noderight=Node(6)
    newnode.children={nodeleft,nodecenter,noderight}
    nodeleft.children=(Node(4))
    Nodecenterleft =Node(2)
    Nodecenterright = Node(0)
    nodecenter.children={Nodecenterleft,Nodecenterright}
    Nodecenterleftleft=Node(1)
    Nodecenterleft.children ={Nodecenterleftleft}
    Nodecenterleftleftright= Node(1)
    Nodecenterleftleft.children={Nodecenterleftleftright}
    Nodecenterrightleft = Node(10)
    Nodecenterright.children={Nodecenterrightleft}
    Noderightleft=Node(1)
    Noderightright=Node(5)
    noderight.children ={Noderightleft,Noderightright}
    print (newnode.findMinPath())

堆栈跟踪如下:

  

回溯(最近通话最近):   文件“ /Users/yashshah/Desktop/Initializer/tree.py”,第45行,在    打印(newnode.findMinPath())   findMinPath中的文件“ /Users/yashshah/Desktop/Initializer/tree.py”,第17行    临时= child.findMinPath()   findMinPath中的文件“ /Users/yashshah/Desktop/Initializer/tree.py”,第16行    对于self.children中的孩子:   TypeError:“节点”对象不可迭代   [完成于0.094秒]

1 个答案:

答案 0 :(得分:1)

此行是错误的:

nodeleft.children = (Node(4))

它必须是:

nodeleft.children = {Node(4)}

由于您可以在任何表达式周围加上括号,因此Python不能确定要使用版本创建元组。所以您的行与:

nodeleft.children = Node(4)

正如我所期望的那样,您的代码最终以为它正在遍历Node对象的集合而已,但实际上是在尝试遍历不是洁净的单个Node对象。