TreeGraph[TreeList_] := Module[{link, tree, tg, rt, tt, d = 0.6}, link[b_, t_] := Module[{a = 0.125, s, p} , s = {-1, -a/2} + b; p = {{0, 0}, {1, 0}, {1, a}, {0, a}, {0, 0}} + {s, s, s, s, s}; {{Hue[0.5], Polygon[p]}, Line[p], Text[t, {1/2, 2a} + s], {GrayLevel[1], Point[{0, 3a} + s]}}]; tree[n_] := {{Max[d, If[Length[TreeList[[n]]] == 3, d, 0] + Plus @@ (tree[#][[1, 1]] & /@ Flatten[ Position[TreeList, {n, __}]])], n, TreeList[[n]]} // Flatten, tree /@ Flatten[ Position[TreeList, {n, __}]]} ; tg[t_, b_] := Module[{bb = b, bbb, a = t[[1, 1]], aa, tt = Last[t], lst = {}}, {link[bb, StringJoin["C", First[t][[2]] // ToString, "=", First[t][[4]] // ToString]], bb -= {2, a/2}; aa = If[tt == {}, 0, tt[[1, 1, 1]] ]/2; tg[#, aa = #[[1, 1]]/2; bbb = bb += {0, aa}; lst = {lst, Line[{b - {1, 0}, bb}]}; bb += {0, aa}; bbb] & /@ tt, lst, If[Length[t[[1]]] == 5, bb += {0, d/2}; {Line[{b - {1, 0}, bb}], Text[StringJoin["x", First[t][[2]] // ToString], bb - {.2, 0}]}, {}]}]; rt = Position[TreeList, {Null, __}] // First // First; tt = tree[rt]; {tg[tt, {0, 0}], Line[{{0, 0}, {1, 0}}]}]