C#Efficient Tree Argument Recursion,Efficient子数组或子列表

时间:2013-04-10 21:55:59

标签: c# recursion sublist arrays

我有一个内存中的树结构,类似于目录树。即:每个节点都有一个命名子节点的字典。我想要一种从列表或名称数组遍历树的有效方法。

如果我从根节点开始,带有我想要遍历的子节点列表,{“有机体”,“灵长类”,“人类”,“男性”,“约翰史密斯”},我递归地处理一步,将剩余的子列表传递给子节点,返回this.subNodes [myList [0]]。GetSubNode(myList.GetRange(1,myList.Count-1))...即使List.GetRange()是浅拷贝,它仍然会为每个级别的递归创建一个新列表。整个操作似乎时间和空间都很低效。

或者,如果我尝试使用数组,那么我可以找到创建子数组的最佳方法是Array.Copy,它也是一个浅层副本。同样的问题。

我在思考C语言,其中列表的头部只是指向另一个指向另一个对象的对象的指针,因此获取子列表就像跟随一个指针一样简单。或者数组只是指向某个内存的指针,因此获取子数组就像递增指针一样简单。非常节省时间和空间。有没有办法在C#中做到这一点?

目前,在C#中,我认为我只需要忘记递归并从顶层进行某种迭代......

或者我可以递归地传递未修改的数组作为参数,以及一个int index,我会在每个级别更深层递增。哪个好,除了我需要将另一个参数传递给递归方法调用,其唯一目的是与第n个递归方法调用通信,“忽略数组中的前n个项目”......这很好,如果这是唯一可行的解​​决方案(或最佳解决方案),那似乎很愚蠢。

有更好的方法吗?

1 个答案:

答案 0 :(得分:1)

.net中有LinkedList implementation,允许您将下一个LinkedListNode传递给方法。

除此之外,使用索引的方法也很好 - 至少它不会消耗额外的内存。

还有一种方法可以将指针传递给数组元素,就像在C中一样。但是这会强制你在不安全模式下编译程序,这通常是不可取的。