我有一棵树,其中有多个子节点。
我需要遍历树,并基于此树进行字符串路径导出。
例如,我的对象是
Public myObject()
{
public string Name { get; set; }
public string Abbreviation { get; set; }
public int ID { get; set; }
Public int ProductId {get; set;}
}
对于上述对象,我有一棵像<TreeNode<myObject>>
所以上面的树将有许多子节点和父节点。
我也有myobject <List>myObject
清单(可能是5项)
在其中,我需要检查5个项目ID的列表是否与树的任何父级或子级匹配。如果匹配,那么我需要构建如下所示的路径。
例如,如果树像第四个子父节点1> Child1>一样匹配,其中另一个Child2与ID匹配,那么我需要从上到下缩写并构造路径。
如何实现此目的,我尝试对列表中的每个项目进行遍历并遍历树,但我无法继续。
我的最终目标将如下所示
<TreeNode<myObject>>treelist
foreach(var obj in myObject) // myobject is list of object
{
//Find the node where this obj is available in the treelist
//may be obj.Id ==treelist>>child>>node>>Child.Id
//Then obj.Abbreviation =treelist.child.Abbreviation/node.abbreviation/child.abbreviation
}
答案 0 :(得分:1)
我将向您展示伪代码,您可以实现真实代码
void traversetree(mytreeNode, dictionary<int, list<myObject>> matches)
{
foreach(node in mytreeNode)
{
if (!matches.ContainsKey(node.myObject.id) // assuming you know how to get the object from the node
matches.Add(node.myObject.id, new List<node.myObject>() { node.myObject });
else
{
if (matches[mytreeNode.myObject.id][0].Something == node.myObject.Something)
matches[node.myObject.id].Add(node.myObject);
}
traversetree(node, matches);
}
}
这将使您具有匹配数据的节点扁平化。现在,只需构建“路径”
foreach(kvp in matches)
Console.WriteLine("ID:" + kvp.Key + string.Join("\\", kvp.Value));
让我知道我是否错过了任何事情。