我已经编写了下面的代码来实现使用python进行广度优先搜索。我不确定.children属性是如何工作的,而.val则不然。我添加了一些打印陈述,看看发生了什么,但我仍然不确定。我运行代码时得到的错误是:
追踪(最近一次通话): 文件“bfs.py”,第31行,in BFS(节点) 在bfs中输入“bfs.py”,第24行 print popped.children [0] .val AttributeError:'tuple'对象没有属性'val'
以下是代码......非常感谢任何帮助。
class Node:
def __init__(self, children, val):
self.children = children
self.val = val
Node8 = ([], 8)
Node7 = ([], 7)
Node6 = ([], 6)
Node5 = ([Node6], 5)
Node4 = ([], 4)
Node3 = ([Node7], 3)
Node2 = ([Node4, Node5], 2)
Node1 = Node([Node2, Node3, Node8], 1)
def bfs(r):
node_list = [r]
while len(node_list) > 0:
popped = node_list.pop(0)
print popped.val
print "debug"
print popped.children
print popped.children[0]
print popped.children[0].val
for child in popped.children:
print child.val
node_list.append(child)
print "appended"
bfs(Node1)
答案 0 :(得分:0)
在创建Node
以外的任何节点时,您没有调用您创建的Node1
构造函数。而是创建2元组,它没有val
属性。添加对Node构造函数的调用,一切都应该正常工作:
# ...
Node8 = Node([], 8)
Node7 = Node([], 7)
Node6 = Node([], 6)
Node5 = Node([Node6], 5)
Node4 = Node([], 4)
Node3 = Node([Node7], 3)
Node2 = Node([Node4, Node5], 2)
Node1 = Node([Node2, Node3, Node8], 1)
# ...