如何遍历树并通过匹配一些值来创建遍历路径的路径

时间:2020-04-20 16:51:26

标签: c# asp.net-mvc

我有一棵树,其中有多个子节点。

我需要遍历树,并基于此树进行字符串路径导出。

例如,我的对象是

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
}

1 个答案:

答案 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));

让我知道我是否错过了任何事情。