【发布时间】:2019-11-17 19:30:15
【问题描述】:
我明白为什么字母 [A, B, D] 会附加到列表中。但我不明白最后两个字母 [E, C] 是如何添加的。 在 pre_order('C', nodes) 之后,字母 'C' 没有左孩子,函数怎么知道要上一级字母 'B' 并检查它的孩子,等等?看树图: Tree
def pre_order(root, nodes):
nodes.append(root.data)
if root and root.left:
pre_order(root.left, nodes)
if root and root.right:
pre_order(root.right, nodes)
return nodes
print(pre_order(root, [])) #prints ['A', 'B', 'D', 'E', 'C']
【问题讨论】:
-
Google 循环和预购。当某些东西没有子节点或子节点已被检查时,函数返回并且执行它的任何函数都会继续。
-
@h4z3,它不会继续执行任何执行它的函数。在字母“D”之后,它调用带有字母“E”的函数。为什么?
-
是的,它确实会继续——但执行它的是同一个函数(具有不同的参数)。这就是递归(抱歉我之前的错误,我是音译而不是翻译)。
-
@GoldenRetriever 这就是您在预订中遍历树的方式。
标签: python recursion linked-list binary-tree preorder