I haven’t experimented with this, but I think the basic idea is to override TreeLayout.AssignTreeVertexValues to call the base method and, if the TreeVertex.Node has more than one incoming link, set the TreeVertex.NodeIndent such that that vertex/node is shifted as far as you want, and change the parent vertex’s Alignment to be TreeAlignment.Start.
I see some complications though, that would require some additional thought to avoid.
First, how far to indent? The problem is that at that time you don’t know yet where any of the vertexes/nodes will be positioned. In the particular case that you have above, it’s easy to calculate. But that might not be true in general, with more complex “trees” where some ancestor of the merge node has lots of subtree.
Second, how do you know which “parent” node will be on the left and which one on the right? If you have ordered the common “ancestor” node’s children (i.e. at the split vertex), then you’ll know. Basically this means customizing the AssignTreeVertexValues to recognize the split node (i.e. the “If” node) and setting its Sorting and Comparer properties so that you get the results you want. That might mean the “If false” case on the left and the “If true” case on the right. Then at the merge node you need to make sure the TreeEdge comes from the left subtree, not from the right subtree.
This is a bit complicated to describe in a forum post or e-mail. If I get a chance later this week, I can try to implement it, but I can’t guarantee that I’ll be able to get to it.