我正在尝试在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]]


documentation中,我看到一种重载方法addEdge()将名为index的整数参数作为第四个参数。但是,我的机器上似乎没有任何实现。

这应该创建一个高度为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()


奇怪的是,documentation中没有addChild()方法(我假设addChild()是该软件包的旧版本的一部分,并且在最新更新中未删除)

创建一个小的二叉树并不难!有人可以帮忙吗?

最佳答案

对于树,您需要使用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);

10-08 03:12