I appreciate it if you let me know the most elegant way to draw a crossed hierarchy such as the followings:
X /\ Y Z /\/\ p q t
q has two parents Y and Z.
This is a hack because it uses the fact that the distance between nodes doesn't change from level to level and so by default branches will overlap:
The edge from Z to q is not really to the q but to an invisible q that sits on top of the first q.
A better way to do it is to name the nodes and draw the extra edge after the tree. This way if the q node moves the extra edge will still point to it. You can create a