BoundaryDiscretizeRegion[
RegionUnion @@ (Function[{root, g},
RegionDifference[#, (#0 /@
Cases[VertexOutComponent[g, #, 1], Except@#]) /. {{} ->
EmptyRegion@2, {x__} :> RegionUnion@x}] &@
root] @@@ #)] &[
Function[g,
With[{root =
SelectFirst[VertexList@g,
VertexInDegree[g, #] == 0 &]}, {root,
If[Length@# == 1, First@#, GraphUnion @@ #] &@
Append[Flatten[
Graph[DirectedEdge @@@ Partition[#, 2, 1]] & /@