# How to do an arbitrary expression growth in Mathematica?

I want to write a function that can be used to grow an expression from a seed or another existing expression based on part specification.

growExpression[expr_,growParts_,unspecified_:Null]:=...


So if I start from a seed say "START" like follows:

expr = growExpression["START",{{1,2,3}->"B",{2,1}->"A"},Null]


"START"[Null[Null,Null[Null,Null,"B"]],Null["A"]]

Note I want it to accept a parameter which can be used to decide unspecified but necessary growth to support the rest of the structure. Next, if I now take this expression as a seed and do further growth as follows:

expr = growExpression[expr,{{1}->"C",{1,2,2,4}->"D",{1,2,1}->"A",{2,1}->"E"},f]


"START"["C"[Null,Null["A",Null[f,f,f,"D"],"B"]],Null["E"]]

Note even if non-leaves are replaced the expression doesn't shrink, i.e. {1}->"C" is basically equivalent to {1,0}->"C".

Is there a builtin function that can help to achieve this behavior without side effects?