I'm trying to procedurally model tree-like network structures with the following properties:

* A root with variable number of nodes
* A variable depth of nodes
* When graphically laid out, edges or nodes must never intersect or overlap

I don't have a background in maths or programming, so I am not sure that I am using the correct terminology. Maybe a picture would better explain what I am after:

![enter image description here](https://i.stack.imgur.com/ToORg.jpg)

I know my way around Ruby pretty well, so I think I should be able to implement a basic algorithm that generates these models. Any pointers or recommendations?