TreeNode堆栈深度优先搜索

时间:2015-03-20 18:57:31

标签: c#

我看到了这个主题:没有堆栈的深度优先搜索[关闭]。我有一个与此功能相关的问题。我想用堆栈。 因为我是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]);
    }
}

2 个答案:

答案 0 :(得分:0)

试试吧。

        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"},
                    }
                },
            }
        } );

结果:

test
a
b
c
d

基本上,循环中的每个行程都会获得堆栈中的第一个项目,并将其子项(如果有)添加到堆栈中。然后它再次重新获取循环。

答案 1 :(得分:0)

  

我是C#初学者,想知道是否有人可以详细解释我1)以下计划目标和2)预期输出是什么。

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