C#递归地遍历T列表中的项,其中T有一个T列表

C#递归地遍历T列表中的项,其中T有一个T列表,c#,methods,recursion,C#,Methods,Recursion,假设我有一个类T,它包含一个列表变量。如何检查列表中的所有项目,然后检查列表中每个项目的所有项目,依此类推,直到每个项目都已处理完毕?我知道如何使用递归方法来实现这一点,但我想知道是否有一种方法不使用调用自身的递归方法。很抱歉,如果问题让人困惑,使用文件夹的更好示例如下 Folder1>包含Folder2、Folder3、Folder4 Folder2>包含Folder5、Folder6 Folder5 > contains Folder7 Folder3>包含Folder8、Folde

假设我有一个类T,它包含一个列表变量。如何检查列表中的所有项目,然后检查列表中每个项目的所有项目,依此类推,直到每个项目都已处理完毕?我知道如何使用递归方法来实现这一点,但我想知道是否有一种方法不使用调用自身的递归方法。很抱歉,如果问题让人困惑,使用文件夹的更好示例如下

Folder1>包含Folder2、Folder3、Folder4

Folder2>包含Folder5、Folder6

Folder5 > contains Folder7
Folder3>包含Folder8、Folder9

Folder9 > contains Folder10

  Folder10 > contains Folder11
我想按顺序遍历所有这些文件夹(f1、f2、f5、f7、f6、f3、f8、f9、f10、f11、f4)


这更有意义吗?谢谢。

我建议使用foreach。比如说

foreach(List node in T)
    foreach(List folders in node)
        //do stuff

我建议使用foreach。比如说

foreach(List node in T)
    foreach(List folders in node)
        //do stuff

如果你提到的顺序很重要并且必须严格遵守,那么你的问题将是一个简单的树上的问题。这是一个著名的算法,您可以找到如何解决它,但性能良好的算法是一个迭代算法。

如果您提到的顺序很重要并且必须严格遵循,那么您的问题将是一个简单树上的问题。这是一个著名的算法,您可以找到如何解决它,但性能良好的算法是一个迭代算法。

这应该可以完成以下工作:

Stack stack;
stack.Push(root folder);
while (stack.Count > 0)
{
    Folder f = stack.Pop();
    foreach (Folder subf in f in reverse order)
        stack.Push(subf);
}

这应该可以做到:

Stack stack;
stack.Push(root folder);
while (stack.Count > 0)
{
    Folder f = stack.Pop();
    foreach (Folder subf in f in reverse order)
        stack.Push(subf);
}

这是一个非常糟糕的方法,因为我需要一个foreach循环,以达到它所能达到的深度。我相信递归将是你唯一的选择。这是一个非常糟糕的方法,因为我需要一个foreach循环,以达到它所能达到的深度。我相信递归将是你唯一的选择。当然,它们会产生不同的顺序(使用
堆栈
而不是
队列
会给出另一个顺序)它仍然是一个不同于递归方法的顺序。但是我认为没有理由相信任何顺序比其他顺序“更好”。我想这是因为他想显示文件夹结构…我已经删除了“else”子句返回中间元素。当然,这些元素产生不同的顺序(使用
堆栈而不是
队列将产生另一个顺序),它仍然是与递归方法不同的顺序。但是我认为没有理由相信任何顺序“更好”我想这是因为他想显示一个文件夹结构…我删除了“else”子句以允许返回中间元素…我没有尝试过,但这是最有意义的。我现在就要尝试,谢谢!我没有尝试过,但这是最有意义的。我现在就要尝试,谢谢!