我有这段代码,它将使用BFS搜索树中的叶子节点
import queue
def BFS(lst,que):
jst=[]
for x in range(len(lst)):
if 2*x+1<=len(lst)-1 and 2*x+2<=len(lst)-1:
que.put(lst[2*x+1])
que.put(lst[2*x+2])
for y in iter(que.get(),None):
if y in lst:
if 2*(lst.index(y))<=len(lst)-1 and 2*(lst.index(y))+2<=len(lst)-1:
que.get()
return y
lst=[]
y=[]
x=int(input('Enter how many nodes:'))
if x%2==0:
print("not the correct no of nodes")
else:
for i in range(x):
lst.append((input("Enter the nodes: ")))
que=queue.Queue(maxsize=10)
y.append(BFS(lst,que))
print(y)
它向我显示了一个错误:TypeError: iter(v, w): v must be callable
,而我在其他文章中看到了该方法的工作原理。还有其他方法可以遍历队列吗?
答案 0 :(得分:0)
即使您不使用iter()
也可以。函数queue.get()
的工作是从队列中取出下一个元素。因此,您的代码可能无需使用iter()
就可以工作。
import queue
def BFS(lst,que):
jst=[]
for x in range(len(lst)):
if 2*x+1<=len(lst)-1 and 2*x+2<=len(lst)-1:
que.put(lst[2*x+1])
que.put(lst[2*x+2])
for y in que.get():
if y in lst:
if 2*(lst.index(y))<=len(lst)-1 and 2*(lst.index(y))+2<=len(lst)-1:
que.get()
return y
lst=[]
y=[]
x=int(input('Enter how many nodes:'))
if x%2==0:
print("not the correct no of nodes")
else:
for i in range(x):
lst.append((input("Enter the nodes: ")))
que=queue.Queue(maxsize=10)
# also do not this change!
y = y.append(BFS(lst,que))
print(y)