我看到了这个主题:没有堆栈的深度优先搜索[关闭]。我有一个与此功能相关的问题。我想用堆栈。 因为我是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]);
}
}
答案 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)预期输出是什么。
我认为首先理解整体概念非常重要,而不是特定编程语言的实现。因此,简而言之:深度优先搜索的目标是“深入”遍历树或图,检查适用于节点的一些条件(例如,目标是找到具有特定键的节点)。这种遍历方式由堆栈数据结构实现。