【发布时间】:2018-10-19 07:48:33
【问题描述】:
我有一个执行二叉树遍历的函数,并且我有一个全局列表“堆栈”来存储临时值。
stack = []
def search(root, v):
global stack
stack.append(root.info)
if root.info == v:
print(stack) #<------- THE FIRST PRINT IS HERE
return
if root.left is not None:
search(root.left, v)
if root.right is not None:
search(root.right, v)
stack.pop()
pass
def lca(root, v1, v2):
search(root,v1)
print(stack) #<------- THE SECOND PRINT IS HERE
你的输出(标准输出)
[4, 2, 1]
[4]
输入:v1=1, v2=7
当我从函数内部和外部打印列表的值时,我发现结果是不同的——在内部打印时,结果是[4,2,1],而外部是[4]。我尝试了不同的方法,比如在函数外部创建列表,然后将其传递给函数,结果总是一样的。有谁知道为什么会这样?
【问题讨论】:
-
你能精确你的数据吗?你的树的价值是什么?对我来说,stack.pop() 似乎是您问题的根源,您在每次迭代时都从列表中检索最后一个元素,但即使不知道您的数据结构和值,也很难回答。
-
有时您的
search函数会打印stack并提前返回。有时它不打印,一直到函数结束。由于search是递归的,因此会执行多个search调用,其中一些会打印stack,而其中一些会更改stack并且不打印它。没有理由期望stack在打印时的内容与最终内容相同。 -
您似乎相信在您的
search函数中点击return后,您的递归搜索就会停止。但事实并非如此。调用堆栈更高的search调用仍将继续触发更多搜索,从stack弹出内容,更改其内容。 -
@NyuB 树会是这样的link
-
而v1的价值是什么?
标签: python list global-variables