我想生成一个 DAG(有向无环图)的 BFS 森林。这意味着我的 Tree 类需要是通用树而不是二叉树(换句话说,当我生成森林时,我无法提前知道节点将拥有的子节点数量)。大部分代码都编写并显示在下面,但是我缺少一行代码,这对我来说是一辈子的事!
public Tree BFS(V start)
{
reset();
LinkedList<GraphMatrixVertex<V>> list = new LinkedList<GraphMatrixVertex<V>>();
GraphMatrixVertex<V> vert = dict.get(start);
Tree root = new Tree(vert);
list.add(vert);
do
{
vert = list.getFirst();
Iterator<V> ni = neighbors(start);
while(ni.hasNext())
{
V v = ni.next();
GraphMatrixVertex<V> vtx = dict.get(v);
if(!vtx.isVisited())
{
list.add(vtx);
vtx.visit();
root.addChild(new Tree(vtx));
}
}
//code goes here
}
while(!list.isEmpty());
return root;
}
我的 Tree 类存储一个值参数、一个父引用和一个子列表。我的问题是引用下一个树节点。将所有未访问的邻居添加为当前节点的子节点后,如何到达下一个节点?
编辑:
所以它看起来像这样?
public void bfs(Tree parent)
{
Iterator<V> ni = neighbors((V) parent.value());
if(ni.hasNext())
{
while(ni.hasNext())
{
V next = ni.next();
GraphMatrixVertex<V> vert = dict.get(next);
if(!vert.isVisited())
parent.addChild(new Tree(next));
}
}
}
递归调用在哪里?