【发布时间】:2012-05-20 02:33:34
【问题描述】:
我正在尝试使用 DFS 而不是 BFS 在 Python 中编写代码,以返回每个节点有任意数量的子节点的树中最深叶的深度。看来我已经接近了,但是下面的代码仍然有一些我无法弄清楚的错误(即返回的深度不正确)。有什么帮助吗?
测试树将是:[[1,2,3],[4,5],[6],[7],[8],[],[],[],[]]
def max_depth_dfs(tree): # DOESN'T WORK
max_depth, curr_depth, Q = 0,0, [0]
visited = set()
while Q != []:
n = Q[0]
more = [v for v in tree[n] if v not in visited]
if not more:
visited.add(n)
curr_depth -= 1
Q = Q[1:]
else:
curr_depth += 1
max_depth = max(max_depth, curr_depth)
Q = more + Q
return max_depth
【问题讨论】:
-
只是为了确保问题出在代码和对需求的解释中:您希望 [[1,2,3],[4, 5],[6],[7],[8],[],[],[],[]]?返回的代码是什么?
-
是的,好点。我期望节点 0 的深度为 0,该特定树的深度为 3。 [[1],[]] 的深度应该是 1,[[1],[2] 的深度,[]] 应该是 2 等等。
-
对于那个输入,这确实返回 3 Repl.it proof
-
你是对的,但这是一个幸运的案例。 [[1,2,3],[4,5],[6],[7],[],[],[8],[],[]] 给出 2,应该是 3。我是在第一个示例中跟踪“curr_depth”,虽然它给出了 3,但 curr_depth 不正常。
-
我对树形结构有点困惑。整数是带数据值的叶节点,数组是分支节点吗?您的示例都没有显示进一步的嵌套,例如 [[1] [2 [3, 4]]]。允许吗?