简体   繁体   English

JUNG顶点的静态顺序,JUNG中的二叉树

[英]Static order of JUNG vertices, binary trees in JUNG

So I have actually 2 problems. 所以我实际上有两个问题。 First of all, can I specify order in which vertices are displayed? 首先,我可以指定显示顶点的顺序吗? By this I mean, when I try to visualise straight line of vertices, sometimes it goes first to last, and sometimes last to first. 我的意思是,当我尝试可视化顶点的直线时,有时会倒数第一,有时会倒数第一。 Here is my code snippet. 这是我的代码段。 Also is there any better way to make straight line than changing vertical dimension to something low? 还有什么比将垂直尺寸更改为较小的直线更好的方法了?

Tree<GraphNode, String> g1 = q.transformToGraph();

Layout<GraphNode, String> layout = new ISOMLayout<GraphNode, String>(g1);
    layout.setSize(new Dimension(1600, 25));
VisualizationViewer<GraphNode, String> vv = new VisualizationViewer<GraphNode, String>(layout);
vv.getRenderContext().setEdgeShapeTransformer(new EdgeShape.Line());
VertexLabelAsShapeRenderer<GraphNode, String> vlasr = new VertexLabelAsShapeRenderer<GraphNode, String>(vv.getRenderContext());
vv.getRenderContext().setVertexShapeTransformer(vlasr);
vv.getRenderContext().setVertexLabelTransformer(
    new ChainedTransformer<GraphNode, String>(
            new Transformer[]{new MyLabeller()}));
vv.getRenderer().setVertexLabelRenderer(vlasr);
return vv;

transformToGraph function returns DirectedSparseGraph. transformToGraph函数返回DirectedSparseGraph。

Also is there any way without writing my own layout to make a nice binary tree visualisation. 还有什么方法可以不编写自己的布局来进行漂亮的二叉树可视化。 Particularly BST, because TreeLayout makes edges different in length and swaps sides of some edges (left are on right and the other way around) 特别是BST,因为TreeLayout会使边的长度不同,并交换一些边的边(左边在右边,而相反在边)

Tree<GraphNode, String> g1 = (DelegateTree) q.transformToGraph();

    Layout<GraphNode, String> layout = new DynamicTreeLayout<GraphNode, String>(g1, 100, 100);
layout.setSize(new Dimension(1600, 100));       VisualizationViewer<GraphNode, String> vv = new VisualizationViewer<GraphNode, String>(layout);
vv.getRenderContext().setEdgeShapeTransformer(new EdgeShape.Line());
VertexLabelAsShapeRenderer<GraphNode, String> vlasr = new VertexLabelAsShapeRenderer<GraphNode, String>(vv.getRenderContext());
vv.getRenderContext().setVertexShapeTransformer(vlasr);
vv.getRenderContext().setVertexLabelTransformer(
    new ChainedTransformer<GraphNode, String>(
        new Transformer[]{new MyLabeller()}));
vv.getRenderer().setVertexLabelRenderer(vlasr);
return vv;

Here transformToGraph changes my BST to DelegateTree. 在这里transformToGraph将我的BST更改为DelegateTree。

Here is how 这是怎么

@Override
    public DelegateTree<GraphNode, String> transformToGraph() {
        DelegateTree<GraphNode, String> graph = new DelegateTree<GraphNode, String>();
        if (root == null) {
            graph.setRoot(null);
            return graph;
        }
        GraphNode rootNode = new GraphNode(root.getValue());
        graph.setRoot(rootNode);
        if (root.getLeft() == root.getRight()) {
            return graph;
        }
        addNodeToGraph(rootNode, root.getLeft(), graph);
        addNodeToGraph(rootNode, root.getRight(), graph);
        return graph;
    }
    protected void addNodeToGraph(GraphNode parent, TreeNode node, DelegateTree<GraphNode, String> graph) {
        if (node == null) {
            return;
        }
        GraphNode curr = new GraphNode(node.getValue());
        graph.addChild(parent.getValue() + node.getValue(), parent, curr);
        addNodeToGraph(curr, node.getLeft(), graph);
        addNodeToGraph(curr, node.getRight(), graph);
    }

The order of iteration of nodes in a graph, or of neighbors/successors/predecessors of a node, is determined by the graph implementation. 图中的节点或节点的邻居/前任/前任的迭代顺序由图实现确定。 Some implementations enforce a consistent ordering, some don't. 有些实现强制执行一致的顺序,而有些则没有。 One implementation that does: http://jung.sourceforge.net/doc/api/edu/uci/ics/jung/graph/DirectedOrderedSparseMultigraph.html 一个实现的实现: http : //jung.sourceforge.net/doc/api/edu/uci/ics/jung/graph/DirectedOrderedSparseMultigraph.html

If you want a line graph, you most likely will want to write your own Layout implementation; 如果您想要折线图,则很可能需要编写自己的Layout实现; it should be pretty easy, though. 不过,这应该很容易。 (Good layout algorithms for general graphs are much more difficult, but for a simple chain it should be basically trivial.) (对于一般图形而言,好的布局算法要困难得多,但是对于简单的链来说,它基本上是微不足道的。)

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM