【发布时间】:2018-03-21 12:43:11
【问题描述】:
# stack_depth is initialised to 0
def find_in_tree(node, find_condition, stack_depth):
assert (stack_depth < max_stack_depth), 'Deeper than max depth'
stack_depth += 1
result = []
if find_condition(node):
result += [node]
for child_node in node.children:
result.extend(find_in_tree(child_node, find_condition, stack_depth))
return result
我需要帮助来理解这段代码。我想回答的问题是
上面的 Python 函数搜索平衡二叉树的内容。 如果假设上限为 1,000,000 个节点,那么 max_stack_depth 常量应该设置为多少?
据我了解,这是一个棘手的问题。如果您考虑一下,每次在递归中调用 find_in_tree() 函数时,stack_depth 都会递增。我们正试图在树中找到一个特定的节点。在我们的例子中,即使我们找到了正确的节点,我们每次都在访问每个节点。因为找到正确节点时停止算法时没有返回条件。因此,max_stack_depth 应该是 1,000,000?
谁能解释一下他们的想法。
【问题讨论】:
-
只有20左右。提示:尝试证明
stack_depth的值等于node与根的距离。 -
我了解你是如何获得 19 的。你几乎可以通过 1+2+4+8+16......... 直到达到 1,000,000。但是我们不是为树中的每个节点都调用 find_in_tree() 并增加 stack_depth 吗?
-
您可以在下面看到解释您的错误的答案(局部变量)
-
呃...请不要大喊(大写)。
-
对不起,我没有大喊大叫,我只是把它放在那里突出显示它。
标签: python recursion binary-tree