【问题标题】:Binary Tree in java Jung Graph packagejava Jung Graph包中的二叉树
【发布时间】:2012-10-17 23:30:42
【问题描述】:

我正在尝试在 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() 的一个重载方法将一个称为索引的整数参数作为第四个参数。但是,我的机器上似乎没有实现。

这应该会创建一个高度为 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() 是旧版本包的一部分,并且没有在最新更新中删除)

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

【问题讨论】:

  • 我正在尝试构建类似的东西,我很好奇您是否能够找到解决方法或者您是否使用其他库?

标签: java binary-tree jung


【解决方案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);

【讨论】:

    【解决方案2】:

    那个班级似乎有几个errors,我认为目前还没有很多发展。您可以尝试在本地构建中为自己的目的修复它(您可以在网站上找到源代码),甚至可以将它们提交给社区。​​p>

    【讨论】:

    • Google 代码仍在开发中:jung.googlecode.com 也就是说,此代码确实存在至少一个错误(以及至少一个文档错误)并且确实需要修复。跨度>
    • 很高兴听到仍有发展。我只是认为该项目已暂停,因为最后一次提交是在 4 月。
    • 根据证据,您的结论并非不合理。尚未提交的事情正在幕后进行。 :)
    猜你喜欢
    • 1970-01-01
    • 2021-02-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-12-19
    • 2010-12-07
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多