gives a tree in which the subtree of tree at the position specified by pos is replaced with new.


replaces subtrees at positions specified by posi with newi.


replaces all subtrees at positions specified by posi with new.


replaces subtrees at positions specified by {posi,1,posi,2,} with newi.


represents an operator form of TreeReplacePart that can be applied to a tree.


  • TreeReplacePart allows replacement of subtrees with new subtrees or general expressions as leaves at positions matching any pattern in a Tree object. »
  • TreeReplacePart[tree,{i,j,}new] replaces the subtree at position {i,j,} with new.
  • TreeReplacePart can use the position specifications returned by TreePosition as well as extended forms as used in functions such as TreeInsert and TreeExtract. »
  • An individual position specification pos can be given as {part1,part2,}, where part specifications parti include:
  • ithe i^(th) child
    -ithe i^(th) child from the end
    {i1,i2,}the list of children with part numbers i1, i2,
    patternthe children with part number matching patt
  • Patterns can include constructs such as __, representing position specifications of variable lengths. »
  • In TreeReplacePart[tree,{p1,p2,}new], {p1,p2,} is interpreted as a list of individual position specifications if all the pi are lists. Otherwise, {p1,p2,} will be taken to be an individual position specification. »
  • TreeReplacePart[posnew][tree] is equivalent to TreeReplacePart[tree,posnew].


open allclose all

Basic Examples  (5)

Replace a subtree with a leaf:

Replace a subtree at any position:

Replace subtrees at multiple positions:

Replace each position with a different subtree:

Replace subtrees whose positions match a pattern:

Use the operator form of TreeReplacePart:

Scope  (1)

Patterns can represent part lists of variable length:

Properties & Relations  (10)

Replacing a subtree with an expression other than a Tree object is equivalent to inserting a leaf:

The expression x is inserted as the leaf


Replace a subtree with multiple subtrees using Splice:

Subtrees can be replaced, as well as inserted or deleted:

Construct a tree from the heads in an expression:

TreeReplacePart replaces a subtree of a tree:

This corresponds to replacing a subexpression of an expression:

ReplacePart can replace subexpressions directly:

If pos is not a list, pos and {pos} are equivalent specifications:

A pattern p that is not explicitly a list matches against the immediate children:

In that case, p is equivalent to {p}:

Replacing position {} replaces the whole tree:

TreeReplacePart uses rules in the order given:

TreeReplacePart can use the lists of positions returned by TreePosition:

TreeReplacePart[tree,{p1,p2,}new] treats {p1,p2,} as a list of individual position specifications if all the pi are lists:

For {{1,2},{3,4}}, the subtrees at positions {1,2} and {3,4} are replaced:

If any pi is not a list, {p1,p2,} is treated as a list of part specifications:

For {{{1,2},{3,4}}}, parts 3 and 4 of parts 1 and 2 are replaced:

Possible Issues  (2)

TreeReplacePart only affects positions that are already present:

TreeReplacePart[tree,{}new] does not replace any subtrees because the list of positions is empty:

TreeReplacePart[tree,{{}}new] replaces position {}, which corresponds to the whole tree:

Wolfram Research (2021), TreeReplacePart, Wolfram Language function, (updated 13).


Wolfram Research (2021), TreeReplacePart, Wolfram Language function, (updated 13).


Wolfram Language. 2021. "TreeReplacePart." Wolfram Language & System Documentation Center. Wolfram Research. Last Modified 13.


Wolfram Language. (2021). TreeReplacePart. Wolfram Language & System Documentation Center. Retrieved from


@misc{reference.wolfram_2021_treereplacepart, author="Wolfram Research", title="{TreeReplacePart}", year="13", howpublished="\url{}", note=[Accessed: 19-January-2022 ]}


@online{reference.wolfram_2021_treereplacepart, organization={Wolfram Research}, title={TreeReplacePart}, year={13}, url={}, note=[Accessed: 19-January-2022 ]}