# TreeFold

TreeFold[f,tree]

gives f[data,{res_{1},res_{2},…}], where data is the data in tree and res_{i} is the result of TreeFold[f,child_{i}] for the i child of tree.

TreeFold[{f,g},tree]

gives g[data] if tree is a leaf and f[data,{res_{1},res_{2},…}] otherwise.

# Details

- In TreeFold[f,tree], tree must be a valid Tree object.
- TreeFold[f,tree] is equivalent to TreeFold[f,tree,TreeData].
- TreeFold folds subtrees in depth-first order, folding subtrees before folding parents.
- TreeFold[f][tree] is equivalent to TreeFold[f,tree].
- TreeFold[f][tree,h] is equivalent to TreeFold[f,tree,h].

# Examples

open allclose all## Basic Examples (4)

Start by applying a separate function g on the tree leaves:

Convert a tree of solid regions into a CSGRegion:

## Scope (6)

## Applications (14)

Get a nested list of the leaves of a tree:

Construct a tree from the atoms of an expression:

Convert this tree to nested lists:

Total the data in the leaves of a tree:

Get a tree of subtotals, starting from the leaves:

Create a tree of terms in a linear recurrence:

Compute the terms of the linear recurrence:

Convert a tree to an XMLElement:

Convert a tree to a TextElement:

Pass the current level as an additional argument:

Linearly fold the data starting from the root with an initial seed:

Get a tree of subtotals, starting from the root:

Compute the minimum level of leaves in a tree using TreeFold with this function:

Get a list of US cities with populations over 100,000:

Construct a graph giving the hierarchical clustering of the cities according to their geodetic positions:

Convert the clustering hierarchy from a Graph object to a Tree object:

For each leaf, obtain the geodetic position of a city from its index in the hierarchical clustering graph:

For each subtree representing a cluster, give the tree containing the spatial median of its children:

Obtain a tree of geodetic positions by using the position of a city for each leaf and the spatial median of the positions for each cluster:

Show the edges in this tree of geodetic positions on a map of the United States:

Create an association giving the dates of birth:

Define a function that compares two people, giving the person who was younger when they had their first child, together with that child and their age when that child was born:

Define a function that compares two siblings, giving the older sibling together with their date of birth, in addition to the youngest first-time parent among their descendants:

Define a function that gives the youngest first-time parent among a person's descendants, given the results for their children:

Find the youngest first-time parent in the tree, together with their first child and their age when the child was born:

## Properties & Relations (14)

Folding a leaf uses an empty list of values for its children:

TreeFold[{f,g},Tree[data,None]] applies the function g to data instead:

TreeFold[f,Tree[data,{child_{1},…}]] is equivalent to applying f to data and the list of results TreeFold[f,child_{i}]:

TreeFold[Tree,tree] is equivalent to tree:

Construct a tree from the heads in an expression:

Use TreeFold to insert a parent node above each subtree:

This corresponds to mapping on the arguments in an expression:

Map maps on the arguments in an expression by default:

Construct a tree from the atoms in an expression:

Use TreeFold to insert a sibling node before each subtree:

This corresponds to mapping on the subexpressions in an expression:

Map maps on the subexpressions in an expression with HeadsTrue:

The functions f and g can be replaced by a single function in TreeFold[{f,g},tree] :

TreeFold[fg,tree] is equivalent to TreeFold[{f,g},tree]:

TreeFold[f,tree] is equivalent to TreeFold[{f,f[#,{}]&},tree]:

TreeFold[{f,g},tree] is equivalent to TreeFold[{f,Identity},TreeMap[g,tree,{-1}]]:

First map the function g on the leaves of the tree:

Then reduce the tree using the function f for internal subtrees and Identity for the leaves:

TreeFold[f,tree,h] is equivalent to TreeFold[g,tree] with g a combination of f and h that recomputes the tree:

Fold applied to a list {a,b,…} is equivalent to TreeFold applied to the tree

:TreeFold can be used to compute the maximum level of a tree:

TreeFold can be used to compute the size of a tree:

TreeFold can be used to convert a tree to nested rules:

TreeFold can be used to create an expression from the leaves of a tree:

## Neat Examples (2)

#### Text

Wolfram Research (2021), TreeFold, Wolfram Language function, https://reference.wolfram.com/language/ref/TreeFold.html.

#### CMS

Wolfram Language. 2021. "TreeFold." Wolfram Language & System Documentation Center. Wolfram Research. https://reference.wolfram.com/language/ref/TreeFold.html.

#### APA

Wolfram Language. (2021). TreeFold. Wolfram Language & System Documentation Center. Retrieved from https://reference.wolfram.com/language/ref/TreeFold.html