【发布时间】:2021-09-17 06:49:50
【问题描述】:
我已经开始学习递归,我似乎理解了这个概念,但同时我感到完全迷失了。
例如,我试图解决在二叉树中查找给定节点的祖先问题
我的树:
1
/ \
7 9
/ \ / \
6 5 2 3
我的代码:
def findAns(node,target,ans):
if node is None:
return ans
ans.append(node.data)
if node == target:
return ans[:-1] #return the list except the last item(whch will be the target node)
ans = findAns(node.left,target,ans)
ans = findAns(node.right,target,ans)
del ans[-1] #Delete last node while backtracking
return ans
ans=[]
findAns(root,target,ans) #target node is 5
print(ans)
print(ans[:-1])
输出:
[1,7,5]
[1, 7]
我无法理解以下问题,
-
当整个树的回溯完成时,列表'ans'将是空的@根位置,我为什么能够在我的列表中获得值[1,7,5]?
-
当 if 条件满足时,我返回 ans[:-1] ,因为我不应该包含目标节点,但是为什么当我打印 'ans' 时我也得到了目标节点?
-
在相同的 'if condition' 中,如果我返回 ans 而不是 ans[:-1],则 y 代码不起作用,我会返回一个空的 'ans' 列表,这是为什么呢?
但是为了避免混淆,我如下所述更改了我的代码,我使用了一个全局变量。但是我认为这不是有效的,任何资源或材料或对我上述问题的解释都会对我有很大帮助。谢谢!
带有全局变量的代码:
_ans=[]
def findAns(node,target,ans):
global _ans
if node is None:
return ans
ans.append(node.data)
if node == target:
_ans.append(list(ans[:-1]))
#return ans[:-1]
ans = findAns(node.left,target,ans)
ans = findAns(node.right,target,ans)
del ans[-1]
return ans
ans=[]
findAns(root,target,ans)
_ans[0]
【问题讨论】:
标签: python recursion binary-tree