【发布时间】:2021-05-24 21:56:45
【问题描述】:
我在下面有一个Node 类:
public class Node {
public int begin {get;set;}
public int end {get;set;}
}
然后我创建一个包含父母和孩子的列表,如下所示:
List<Node> list = new List<Node>();
list.Add(new Node(){begin = 1, end =2});
list.Add(new Node(){begin = 1, end =3});
list.Add(new Node(){begin = 2, end =4});
list.Add(new Node(){begin = 2, end =5});
list.Add(new Node(){begin = 5, end =6});
list.Add(new Node(){begin = 5, end =7});
这是上面列表的树数据:
1
2 3
4 5
6 7
如何找到节点的所有父节点?
例如,如果我的Node 是2。结果是:4,5,6,7
我尝试了这段代码,但当我的Node 是2 时,结果只有4 , 5
public static List<int> FindChild(List<Node> list,int id) {
int value = id;
List<int> res = new List<int>();
var child = list.Where(b => b.begin == id).ToList();
foreach (var item in child) {
res.Add(item.end);
FindChild(list,item.end);
}
return res;
}
【问题讨论】:
-
好的,所以你没有节点列表,你有边列表。您可能想重命名您的课程以反映这一点!不管怎样,问题是你忽略了
FindChild的返回值——你可能想要res.AddRange(FindChild(list, item.end)); -
将父级添加到您的节点类并在初始化每个节点时添加父级。
-
@Orace 另一个问题不相关——它建立在有父节点的节点上,而这个问题建立在边缘上。 OP 自己也几乎解决了这个问题,而您提出的副本并不能帮助他们完成最后一步
标签: c#