C# 如何在树中搜索特定节点类

C# 如何在树中搜索特定节点类,c#,.net,data-structures,tree,trie,C#,.net,Data Structures,Tree,Trie,我有一个由节点对象填充的树。每个节点都有一个ArrayList,它存储其子节点,因为可能有未指定数量的子节点,这与二叉树不同 如果每个节点都有许多子节点,每个子节点又有自己的子节点,那么如何遍历树来查找特定节点,以此类推。我只是在寻找一种迭代执行此操作的通用方法,例如使用一个函数搜索节点的arrayList(存储子节点)以及每个子节点随后的子节点数组列表 有什么建议吗 更新 这就是我迄今为止所尝试的: return ( (StrangeNode)current.ChildrenList

我有一个由
节点
对象填充的树。每个节点都有一个ArrayList,它存储其子节点,因为可能有未指定数量的子节点,这与二叉树不同

如果每个节点都有许多子节点,每个子节点又有自己的子节点,那么如何遍历树来查找特定节点,以此类推。我只是在寻找一种迭代执行此操作的通用方法,例如使用一个函数搜索节点的arrayList(存储子节点)以及每个子节点随后的子节点数组列表

有什么建议吗

更新


这就是我迄今为止所尝试的:

return 
(
    (StrangeNode)current.ChildrenList
        .SingleOrDefault(c => 
            c.GetType().Name.ToString().Equals("StrangeNode"))
).myArrayList;

最明显的两种方法是深度优先搜索和广度优先搜索。你可以在任何一本教科书或在线搜索中找到这两种算法的例子。您可以在3-10行代码中递归地实现深度优先搜索。

您可以迭代地执行以下操作:

List<Node> nodes = new List<Node>();
nodes.add( rootnode )

for (int i=0; i < nodes.count; i++)
{

Node currentNode = nodes[i];

//do the processing to check here

nodes.add(currentNode.children) //not 100% sure how to do this, but you get the idea

}
List节点=新建列表();
nodes.add(rootnode)
对于(int i=0;i

如果你想递归地完成它,它只是一个深度优先,非常简单。

这听起来像是一种尝试,让你做作业?实际上这不是作业,我正在尝试实现一个树,在树的某些点上有一个特殊类型的节点(即不同的类)。他不是字面意思,您尝试过什么?这是我迄今为止尝试过的,但没有效果:return((奇异节点)current.ChildrenList.SingleOrDefault(c=>c.GetType().Name.ToString().Equals(“奇异节点”)).myArrayList;我已经用到目前为止所尝试的更新了我的问题。如果可能的话,我想迭代而不是递归。迭代有什么好处?没有什么好处,我只是从来没有掌握过递归。呵呵。我没有完全理解这一点-你说的是,我将所有子元素添加到一个数组中,然后在该数组中搜索“奇怪”节点?仅此而已。检查当前节点,然后将子节点推入数组。然后检查下一个节点,并将这些子节点也放入数组中。最后你会看穿所有的孩子。但是,这将如何照顾孩子们的孩子呢?当然会。首先,您只需要根节点。然后添加根的子级。然后转到下一个节点(子节点1),添加其“子节点”,以此类推。