c#高效的树参数递归,高效的子数组或子列表

本文关键字:高效 数组 列表 递归 参数 | 更新日期: 2023-09-27 18:08:46

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

如果我从根节点开始,有我想遍历的子节点列表,{"organisms","primates","human","male","John Smith"},我递归地处理一步并将剩余的子列表传递给子节点,返回this.subNodes[myList[0]].GetSubNode(myList. getrange (1,myList. count -1))…尽管list . getrange()是一个浅拷贝,但它仍然会为每个递归级别创建一个新列表。整个操作似乎既省时又省力。

或者如果我尝试使用数组,那么我可以找到创建子数组的最佳方法是array。复制,也是浅拷贝。同样的问题。

我在考虑C语言,其中列表的头部只是一个指向对象的指针,该对象有另一个指向另一个对象的指针,因此获得子列表就像跟随一个指针一样简单。或者数组只是指向内存的指针,所以获取子数组就像对指针进行加1一样简单。非常节省时间和空间。在c#中有什么办法做到这一点吗?

目前,在c#中,我认为我只需要忘记递归,从顶层做某种迭代…

或者我可以递归地传递未修改的数组作为参数,并附带一个int索引,每层增加一个。这很好,除了我需要传递另一个参数给递归方法调用,其唯一目的是与第n个递归方法调用通信,"忽略数组中的前n项"…这很好,只是如果这是唯一可能的解决方案(或最佳可能的解决方案),这似乎很愚蠢。

有更好的方法吗?

c#高效的树参数递归,高效的子数组或子列表

在。net中有一个LinkedList的实现,它允许你将下一个LinkedListNode传递给方法。

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

还有一种方法可以将指针传递给数组元素,就像在c中一样,但这会迫使您在不安全模式下编译程序,这通常是不希望的。