深度优先使用Queue进行搜索

Mik*_*ike 4 c# tree tree-traversal .net-3.5 depth-first-search

如何在c#中使用队列进行深度优先搜索?

以下是我的数据结构:

public class Node
{
  public string Name{get;set}
  public IEnumerable<Node> Children{get;set;}
}
Run Code Online (Sandbox Code Playgroud)

现在我有一个Node对象的集合,每个对象都带有子节点,它们还有子节点等等.

我想访问每个节点并将其转换为不同的形式.

像下面这样的东西:

public IEnumerable<IContent> BuildContentFrom(IEnumerable<Node> nodes)
        {
            var queue = new Queue<Node>(nodes);

            while (queue.Any())
            {
                var next = queue.Dequeue();
                yield return BuildContentFromSingle(next);

                foreach (var child in next.Children)
                {
                    queue.Enqueue(child);
                }
            }
        }

        public IContent BuildContentFromSingle(Node node)
        {
            var content = _contentFactory.Create(node);
            return content;
        }  
Run Code Online (Sandbox Code Playgroud)

由于某些原因,上面并没有给我深度.你能帮忙吗?

Jon*_*Jon 8

深度优先搜索是使用LIFO数据结构实现的,因此您需要交换Queuefor a Stack.使用像队列这样的FIFO结构可以为您提供BFS.