如何创建生成树

时间:2009-08-07 13:57:24

标签: java xml algorithm

我有一个Java的各种可用地址格式的有向图,包括周期。除了上面的模板之外,我想存储用户地址,这是该图的范围。我的图表来自以下XML:

<address>
    <city start="true">
        <minicity />
        <street />
        <square />
    </city>
    <minicity>
        <street />
        <alley />
        <square />
    </minicity>
    <street>
        <street />
        <alley />
        <blibd />
    </street>
    <square>
        <street />
        <alley />
        <blibd />
    </square>
    <alley final="true">
        <alley />
        <blibd />
        <plaque />
    </alley>
    <blibd final="true">
        <alley />
        <blibd />
        <plaque />
    </blibd>
    <plaque final="true">
        <stage />
        <unit />
    </plaque>
    <stage final="true">
        <unit />
    </stage>
    <unit final="true">
    </unit>
</address>

正如您所看到的,图表的街道节点上方有一个循环。用户地址的示例如下所示:

  

城市:街道:b街道:c街道:小巷:f

我的问题是: 存储用户地址图的最佳方法是什么?我有上面的模板图,想知道在这个模板中保存用户图或者在不同结构外保存用户图是否更好。

1 个答案:

答案 0 :(得分:1)

adjacency matrix是表示图表的标准方式。在您的情况下,矩阵的每个元素都可以补充节点类别(城市等)。

用户的地址可以通过存储对给定地址的最内层节点的单独引用并向外追踪到城市级别来构建地址来推导。

我个人可能会选择比通用图更结构化的方法,创建城市,街道等业务对象,从而强制执行地址结构; e.g。

public interface Residence {
  int getNumber();
  Street getStreet();
}

public interface Street {
  City getCity();
}

public interface City {
  Country getAddress();
}

要显示给定住所的地址,我只需走对象图; e.g。

Residence r = ...
System.err.println(String.format("%d %s %s %s", r.getNumber(), r.getStreet(), r.getStreet().getCity(), r.getStreet().getCity().getCountry()));