2

JUNG (Java のグラフ パッケージ) でバイナリ ツリーを作成しようとしています。しかし、私はこれを達成することができません。

ここに私の情報源があります:

Tree tree1 = new OrderedKAryTree<String, Integer>(2);
tree1.addVertex("v0");
tree1.addEdge(1, "v0", "v1");
tree1.addEdge(2, "v0", "v2");

これが私が得る例外です:

java.lang.IllegalArgumentException: 'index' must be in [0, [order-1]]

ドキュメントでは、オーバーロードされたメソッドの 1 つがaddEdge()index と呼ばれる整数パラメータを 4 番目の引数として取っていることがわかります。ただし、私のマシンにはそれが実装されていないようです。

これにより、高さ 1 のバイナリ ツリーが作成されます。エッジの前にも頂点を追加してみました。

tree1.addVertex("v0");
tree1.addVertex("v1");
tree1.addVertex("v2");
tree1.addEdge(1, "v0", "v1");
tree1.addEdge(2, "v0", "v2");

これが私が得る例外です:

java.lang.UnsupportedOperationException:
    Unless you are setting the root, use addEdge() or addChild()

奇妙な部分は、ドキュメントaddChild()にメソッドがないことです(パッケージの古いバージョンの一部であり、最新の更新で削除されていないと思います)addChild()

小さなバイナリ ツリーを作成するのは難しくありません。誰か助けてくれませんか?

4

2 に答える 2

1

ツリーの場合、setRoot および addChild 関数を使用する必要があります


    DelegateTree<String, String> tree = new DelegateTree<String,String>();
    tree.setRoot("A");
    tree.addChild("A-B1", "A", "B1");
    tree.addChild("A-B2", "A", "B2");

    BasicVisualizationServer<String, String> vs = new BasicVisualizationServer<String, String>(
            new FRLayout<String,String>(tree), new Dimension(1100, 640));


     Transformer<String,Paint> vertexPaint = new Transformer<String,Paint>() {
            public Paint transform(String i) {
                return Color.GRAY;
            }
        };  



        RenderContext<String, String> renderContext = vs.getRenderContext();
                renderContext.setVertexFillPaintTransformer(vertexPaint);

            Transformer<String, String> transformer = new ToStringLabeller<String>();
            renderContext.setEdgeLabelTransformer(transformer);
            Transformer<String, String> vertexTransformer = new ToStringLabeller<String>();
            renderContext.setVertexLabelTransformer(vertexTransformer);
            vs.getRenderer().getVertexLabelRenderer().setPosition(Position.CNTR);



            JFrame frame = new JFrame();
            frame.getContentPane().add(vs);
            frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
            frame.pack();
            frame.setVisible(true);
于 2013-04-16T12:57:35.940 に答える
0

そのクラスにはいくつかのエラーがあるようで、まだ多くの開発が行われているとは思いません。ローカル ビルド (Web サイトでソース コードを見つけることができます) で独自の目的のために修正し、コミュニティにコミットすることもできます。

于 2012-10-19T12:19:54.620 に答える