Try the code
levelTree[expr_] := Replace[expr, {h_[x___] -> {h, x}}, {0, Infinity}];
levelTree @ {a, {b1, b2}, {c, {d1, d2}}}
which returns
{List, a, {List, b1, b2}, {List, c, {List, d1, d2}}}
A simple exmaple
levelTree[a b + c d]
which returns
{Plus, {Times, a, b}, {Times, c, d}}
I like the lispy variation
levelTree[expr_] := Replace[expr, (h : Except[List])[x___] -> {h, x}, {0, Infinity}];
levelTree@cons[car[1levelTree @ plus[car[{1, 2]2}], cdr[3cdr[{3, 4]]4}]]
which returns
{consplus, {car, {1, 2}}, {cdr, {3, 4}}}
Given any of these results, you can now use TreeForm[]
or ExpressionGraph[]
or some other custom Graph display.