如何在简单的二叉树中选择节点所在的哪一侧?

时间:2016-04-22 05:26:18

标签: graphviz dot

在一个简单的二叉树中,我能够通过添加不可见节点和不可见边来使图形看起来正确,例如:

digraph
{
        vertex_1 [label="A"];
        vertex_2 [label="B"];
        vertex_2 -> vertex_1 [label="Left"];
}

产生:

enter image description here

为:

digraph
{
        vertex_1 [label="A"];
        vertex_2 [label="B"];
        vertex_0 [style=invis];
        vertex_2 -> vertex_1 [label="Left"];
        vertex_2 -> vertex_0 [style=invis];
}

产生:

enter image description here

但是当我尝试使用4节点图形(最初是直接向上和向下)时,这就是我得到的:

digraph
{
        vertex_1 [label="A"];
        vertex_2 [label="B"];
        vertex_3 [label="F"];
        vertex_4 [label="G"];
        vertex_01 [style=invis];
        vertex_02 [style=invis];
        vertex_03 [style=invis];
        vertex_4 -> vertex_3 [label="Left"];
        vertex_3 -> vertex_1 [label="Left"];
        vertex_1 -> vertex_02 [style=invis];
        vertex_4 -> vertex_03 [style=invis];
        vertex_3 -> vertex_01 [style=invis];
        vertex_1 -> vertex_2 [label="Right"];
}

产生:

enter image description here

显然我希望B位于A的右侧。我尝试将隐形边缘语句的顺序和实际边缘从B切换到A,就像哪一个先出现但是没有区别。如何告诉程序将特定节点或边缘放在特定端?

1 个答案:

答案 0 :(得分:1)

对于从左到右的顺序,节点创建顺序是相关的。必须在其正确的兄弟节点之前创建左节点。

digraph
{
    vertex_1 [label="A"];
    vertex_02 [style=invis];
    vertex_2 [label="B"];
    vertex_3 [label="F"];
    vertex_4 [label="G"];
    vertex_01 [style=invis];
    vertex_03 [style=invis];
    vertex_4 -> vertex_3 [label="Left"];
    vertex_3 -> vertex_1 [label="Left"];
    vertex_1 -> vertex_02 [style=invis];
    vertex_4 -> vertex_03 [style=invis];
    vertex_3 -> vertex_01 [style=invis];
    vertex_1 -> vertex_2 [label="Right"];
}

enter image description here