Construct Phylogeny form Edgelist
This will be a complete answer, but it's got code, so it won't work as a comment. Working backwards from rtree(3), here's a way to build a phylo object from component parts, which might be helpful:

children &lt;- c(5, 1, 2, 3)
parents &lt;- c(4, 5, 5, 4)
x &lt;- matrix(c(parents, children), ncol = 2)
tr &lt;- list(edge = x, tip.label = 1:3, Nnode = 2)
class(tr) &lt;- "phylo"
plot(tr)


Doing the same with your children and parents, doesn't work, however.

children &lt;- c(1, 2, 3, 4)
parents &lt;- c(1, 1, 2, 2)
x &lt;- matrix(c(parents, children), ncol = 2)
tr &lt;- list(edge = x, tip.label = 1:3, Nnode = 2)
class(tr) &lt;- "phylo"
tr


Gives

Error in if (tabulate(phy$edge[, 1])[length(phy$tip.label) + 1] &gt; 2) FALSE else TRUE : missing value where TRUE/FALSE needed

I don't know hot to make the edge list conform to the expected order for a phylo.