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