如何递归迭代递归数据结构

时间:2011-08-29 08:17:21

标签: java recursion

我的数据结构如下:

 public class A{
    String number;
    Map <String ,B> BMap;
 }

 public class B{
    String number;
    Map <String ,A> AMap;
 }

0 B
    0.0 A
    0.1 A
        0.1.0 B
         ...so on
     1 B
      1.0 A
         1.0.0 B
    1.1 A

等等。 注意: B之后没有B

现在我想通过类B的地图进行迭代,即AMap。我试图从中创建一个XML结构。我想要一些像id-number这样的属性。 AB每个级别的ID号应该与书中的结构相似。最有效的方法是什么?

1 个答案:

答案 0 :(得分:1)

将问题视为bipartite-graph,然后运行DFS

编辑:添加代码快照

我没有调试它,但它应该是那样的[看看迭代方法]。使用iterate(new HashSet<A>(),new HashSet<B>())

激活它
public class A{
    String number;
    Map<String ,B> BMap;
    public void iterate(Set<A> aVisited,Set<B> bVisited) {
        for (Entry<String, B> entry : BMap.entrySet()) {
            if (bVisited.contains(entry.getValue())) continue;
            System.out.println(entry.getKey());
            bVisited.add(entry.getValue());
            entry.getValue().iterate(aVisited,bVisited);
        }
    }

}

public class B{
    String number;
    Map<String ,A> AMap;
    public void iterate(Set<A> aVisited,Set<B> bVisited) {
        for (Entry<String, A> entry : AMap.entrySet()) {
            if (aVisited.contains(entry.getValue())) continue;
            System.out.println(entry.getKey());
            aVisited.add(entry.getValue());
            entry.getValue().iterate(aVisited,bVisited);
        }
    }
}