I want to render several trees simultaneously and place all root nodes and all leaf nodes on the same level.
Here's an example of what I'm trying to do. Root nodes A and X are on the same level, and so are leaf nodes B, D, and Z.

I unsuccessfully tried putting roots in one rank and leaves in another as follows:
digraph G {  rankdir = TB; subgraph { A -> B A -> C C -> D X -> Y rank = same; A; X; rank = same; B; D; Y; } /* closing subgraph */ } And got this outcome where everything is on the same rank. 
Any suggestions about what I should be trying? I've already got roots and leaves identified.
Putting the rank = same; ... statements in braces, e.g.:
digraph G {    rankdir = TB;   subgraph {     A -> B     A -> C     C -> D     X -> Y     // note that rank is used in the subgraph     {rank = same; A; X;}     {rank = same; B; D; Y;}   } /* closing subgraph */ } ... gives the desired result:

The ideal structure is actually rank max and rank min. No need for a subgraph or any other shenanigans. GraphViz has explicit facilities for this.
With complex graphs, rank=same will often end up near the middle of the graph. If you mean top and bottom, say top and bottom.
digraph G {     rankdir = TB;    A -> B;   A -> C -> D;   X -> Y;    { rank=min; A; X; }   { rank=max; B; D; Y; }  } 
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With