【发布时间】:2021-07-13 07:30:16
【问题描述】:
我的任务是在树中找到路径,其中节点的总和构成一个特定的总和,在开头给出。
例子:
在我的实现中,我将结果保存在嵌套列表中,如下所示:
private void DfsPathGivenSum(Tree<T> node, List<T> list, int sum, List<List<T>> results)
{
list.Add(node.Key);
foreach (var child in node.children)
{
this.DfsPathGivenSum(child, list, sum, results);
}
var currentPathSum = list.Sum(x => int.Parse(x.ToString()));
if (currentPathSum == sum)
{
results.Add(list);
}
list.RemoveAt(list.Count - 1);
}
当我从另一个方法调用这个方法时:
public List<List<T>> PathsWithGivenSum(int sum)
{
var list = new List<T>();
var results = new List<List<T>>();
this.DfsPathGivenSum(this, list, sum, results);
return results;
}
对内部列表的引用似乎丢失了。我该如何处理这个问题?
【问题讨论】:
-
你打电话给
list.RemoveAt(..)为什么? -
'list' 跟踪当前路径,因此 list.RemoveAt() 删除不再位于当前路径上的元素。
-
这里的教训是递归。通过递归,您可以“走”树。这是一些documentation 和here
-
您不应该从原始列表中删除项目。
-
那我怎么能跟随路径元素呢?也许我没有问清楚这个问题,但是实现很完美,当我调用递归方法时,嵌套的 List 丢失了元素。
标签: c# data-structures reference tree