【发布时间】:2018-08-30 11:08:17
【问题描述】:
# 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?
如果您查看 stack_depth 何时增加,那么看起来我们每次访问节点时都会增加。在我们的例子中,我们每次都访问每个节点。因为找到正确节点时停止算法时没有返回条件。
有人能解释一下他们的想法吗?
【问题讨论】:
-
您的问题似乎是关于二叉树数据结构作为 CS 中的一个概念,而不是任何与之相关的特定编程挑战。我想说这个问题与 StackOverflow 无关,应该在 cs.stackexchange.com 上提问。
-
为什么是
1x2x4x...?不应该是1+2+4+...吗?当然,前 7 层中没有一百万个节点。