点代码:确定左右孩子

我想在点(GraphViz)中制作一棵红黑树。 但是我总是在节点放置方面遇到问题。

这是我到目前为止的代码(由于放置问题,它尚未完成):

digraph G {
//graph [ratio=.48];
node [style=filled,color=black,shape=circle,width=.6
  fontname=Helvetica,fontweight=bold,fontcolor=white,fontsize=24,fixedsize=true];
  B1[label = 35];
    B2[label = 10];
    B3[label = 25];
  B4[label = 40];

  node [style=filled,color=red,width=.6
    fontname=Helvetica,fixedsize=true];

    R1[label = 15];
    R2[label = 5];
    R3[label = 20];
    R4[label = 30];
    R5[label = 45];

    node  [label = "NIL",style=filled,shape=record,width=.4,height=.25,fontname=Helvetica,fontsize=16,fixedsize=true];
    N1[];
    N2[];
    N3[];
    N4[];
    N5[];
    N6[];
    N7[];
    N8[];
    N9[];
    N10[];

    B1 -> B4;
    B1 -> R1;
    R1 -> B2;
    R1 -> B3;
    B4 -> N1;
    B4 -> R5;

}

所以我得到的是:

点代码:确定左右孩子

但是我想要的是这个

点代码:确定左右孩子

如您所见,我的代码切换了节点15和40,以及节点45和NIL。

即使我更改代码中的顺序,结果也不会改变。

huminyan 回答:点代码:确定左右孩子

看起来像添加具有相同等级的显式(不可见)关系可以解决此问题。 在这种情况下:

{rank=same;  R1;B4;}
R1->B4 [style="invis"]
{rank=same;  R5;N1;}
N1->R5  [style="invis"];
,

节点在图上出现的顺序取决于定义的顺序。

因此,如果要在(40)之前渲染节点(15),则必须先定义(15),然后再定义(40):

  R1[label = 15];
  B4[label = 40];

另一种解决方案是使用不可见的边缘和rank=same属性来定位节点,如@albert所建议的那样,但我建议仅当您用尽了上述所有自然定位方法后,才使用此方法

在这种情况下,您将失去整齐的样式分组,因为您将必须至少手动为(15)和[NIL]定义样式。但这是次要的邪恶。

所有这些,我为您的代码提供的解决方案:

digraph G {

node [style=filled,color=black,shape=circle,width=.6
  fontname=Helvetica,fontweight=bold,fontcolor=white,fontsize=24,fixedsize=true];

  B1[label = 35];
    R1[color=red label = 15];
    B2[label = 10];
    B3[label = 25];
    N1[label = "NIL",shape=record,width=.4,height=.25 fontsize=16];
  B4[label = 40];

    R2[color=red label = 5];
    R3[color=red label = 20];
    R4[color=red label = 30];
    R5[color=red label = 45];

    N2[label = "NIL",height=.25 fontsize=16];
    N3[label = "NIL",height=.25 fontsize=16];
    N4[label = "NIL",height=.25 fontsize=16];
    N5[label = "NIL",height=.25 fontsize=16];
    N6[label = "NIL",height=.25 fontsize=16];
    N7[label = "NIL",height=.25 fontsize=16];
    N8[label = "NIL",height=.25 fontsize=16];
    N9[label = "NIL",height=.25 fontsize=16];
    N10[label = "NIL",height=.25 fontsize=16];

    B1 -> B4;
    B1 -> R1;
    R1 -> B2;
    R1 -> B3;
    B4 -> N1;
    B4 -> R5;

}

结果:

result

本文链接:https://www.f2er.com/3011859.html

大家都在问