C# 树节点堆栈深度优先搜索

C# 树节点堆栈深度优先搜索,c#,C#,我看到了这个主题:没有堆栈的深度优先搜索[关闭]。我有一个关于这个功能的问题。我想用stack。 因为我是C#初学者,不知道是否有人能详细地向我解释1)下面的程序目标是什么,2)预期的输出是什么 void Foo(TreeNode root) { Stack nodes = new Stack(); nodes.Push(root); while (nodes.Count > 0) { TreeNode node = (TreeNode)

我看到了这个主题:没有堆栈的深度优先搜索[关闭]。我有一个关于这个功能的问题。我想用stack。 因为我是C#初学者,不知道是否有人能详细地向我解释1)下面的程序目标是什么,2)预期的输出是什么

void Foo(TreeNode root)
{
    Stack nodes = new Stack();
    nodes.Push(root);

    while (nodes.Count > 0)
    {
        TreeNode node = (TreeNode) nodes.Pop();
        Console.WriteLine(node.Text);
        for (int i = node.Nodes.Count - 1; i >= 0; i--)
            nodes.Push(node.Nodes[i]);
    }
}
试试看

        Foo(new TreeNode()
        {
            Text = "test",
            Nodes = new List<TreeNode>()
            {

                new TreeNode(){Text = "a"},
                new TreeNode(){
                    Text = "b",
                    Nodes = new List<TreeNode>()
                    {

                        new TreeNode(){Text = "c"},
                        new TreeNode(){Text = "d"},
                    }
                },
            }
        } );
基本上,循环中的每次行程都会获取堆栈中的第一项,并将其子项(如果有的话)添加到堆栈中。然后它再次获取循环

我是一名C#初学者,不知道是否有人能向我详细解释1)以下程序目标是什么,2)预期输出是什么


我认为重要的是首先理解整体概念,而不是特定编程语言的实现。因此,简言之:深度优先搜索的目标是“深入”遍历一棵树或一个图,检查一些适用于节点的条件(通常目标是找到具有特定键的节点)。这种遍历方式由堆栈数据结构实现

目标是获得预期的输出,所以这只是一个问题。我认为最好的方法是创建不同的树,并在代码中运行它们来找到答案。看一下预购的图片,非常感谢大家。我现在明白了
test
a
b
c
d