集合中的递归函数

Ela*_*esh 2 c# recursion function

我正在使用c#和List集合并加载了值.一旦完成,我试图递归地阅读它们,但有些我怎么也无法实现这一点.

以下是我的主要代码.

    private static void Main(string[] args)
            {
                var node = new Node
                    {
                        Name = "N1",
                        Nodes =
                            new List<Node>
                                {
                                    new Node { Name = "N1a" },
                                    new Node { Name = "N1b", Nodes = new List<Node> { new Node { Name = "N1B1" } } },
                                    new Node
                                        {
                                            Name = "N1c",
                                            Nodes =
                                                new List<Node> { new Node { Name = "N1C1", Nodes = new List<Node> {new Node{Name = "N1C1A"} } } }
                                        }
                                }
                    };
                GetNodes( node );
                Console.ReadLine();
            }

 public class Node
        {
            public string Name { get; set; }

            public IList<Node> Nodes { get; set; }
        }
Run Code Online (Sandbox Code Playgroud)

并且函数调用如下

public static IEnumerable<Node> GetNodes(Node node)
        {
            if (node == null)
            {
                return null;
            }

            Console.WriteLine(node.Name);

            foreach (var n in node.Nodes)
            {
                return GetNodes(n);
            }

            return null;
        }
    }  
Run Code Online (Sandbox Code Playgroud)

任何人都可以帮我修复递归函数吗?

Raw*_*ing 6

如果您只想打印所有节点的名称,

public static void GetNodes(Node node)
{
    if (node == null)
    {
        return;
    }
    Console.WriteLine(node.Name);
    foreach (var n in node.Nodes)
    {
        GetNodes(n);
    }
}
Run Code Online (Sandbox Code Playgroud)

如果你想弄平树,

public static IEnumerable<Node> GetNodes(Node node)
{
    if (node == null)
    {
        yield break;
    }
    yield return node;
    foreach (var n in node.Nodes)
    {
        foreach(var innerN in GetNodes(n))
        {
            yield return innerN;
        }
    }
}
Run Code Online (Sandbox Code Playgroud)