In some cases, like the parsing method described above or the algorithm for constructing tableaux, we have a non-deterministic algorithm for constructing a tree. There is then a tree diagram for the computational paths, where each node is a possible state of the system, which is generally are partially filled in tree of the type the algorithm is meant to construct. In other words we have a tree of trees. The trees associated to the nodes are all finite trees, because they are the result of a finite computation, but the larger tree, representing all possible computational paths, is generally infinite.
Sometimes different program paths lead to identical states. You can take advantage of this by replacing the state tree with a “directed acyclic graph”, so instead of a tree of trees we have a directed acyclic graph of trees. There are practical parsing algorithms which use this trick to avoid exponential growth.