In graph theory
, a tree is an undirected graph
in which any two vertices
are connected by ''exactly one'' path
, or equivalently a connected acyclic
undirected graph. A forest is an undirected graph in which any two vertices are connected by ''at most one'' path, or equivalently an acyclic undirected graph, or equivalently a disjoint union
(or directed tree or oriented tree
[See .] [See .]
or singly connected network
) is a directed acyclic graph
(DAG) whose underlying undirected graph is a tree. A polyforest (or directed forest or oriented forest) is a directed acyclic graph whose underlying undirected graph is a forest.
The various kinds of data structures
referred to as trees
in computer science
have underlying graph
s that are trees in graph theory, although such data structures are generally rooted trees. A rooted tree may be directed, called a directed rooted tree,
either making all its edges point away from the root—in which case it is called an arborescence
—or making all its edges point towards the root—in which case it is called an anti-arborescence
A rooted tree itself has been defined by some authors as a directed graph.
A rooted forest is a disjoint union of rooted trees. A rooted forest may be directed, called a directed rooted forest, either making all its edges point away from the root in each rooted tree—in which case it is called a branching
or out-forest—or making all its edges point towards the root in each rooted tree—in which case it is called an anti-branching or in-forest.
The term "tree" was coined in 1857 by the British mathematician Arthur Cayley
A ''tree'' is an undirected graph ''G'' that satisfies any of the following equivalent conditions:
* ''G'' is connected
(contains no cycles).
* ''G'' is acyclic, and a simple cycle is formed if any edge
is added to ''G''.
* ''G'' is connected, but would become disconnected
if any single edge is removed from ''G''.
* ''G'' is connected and the 3-vertex complete graph
is not a minor
* Any two vertices in ''G'' can be connected by a unique simple path
If ''G'' has finitely many vertices, say ''n'' of them, then the above statements are also equivalent to any of the following conditions:
* ''G'' is connected and has edges.
* ''G'' is connected, and every subgraph
of ''G'' includes at least one vertex with zero or one incident edges. (That is, ''G'' is connected and 1-degenerate
* ''G'' has no simple cycles and has edges.
As elsewhere in graph theory, the order-zero graph
(graph with no vertices) is generally not considered to be a tree: while it is vacuously connected as a graph (any two vertices can be connected by a path), it is not 0-connected
(or even (−1)-connected) in algebraic topology, unlike non-empty trees, and violates the "one more vertex than edges" relation. It may, however, be considered as a forest consisting of zero trees.
An internal vertex (or inner vertex or branch vertex) is a vertex of degree
at least 2. Similarly, an external vertex (or ''outer vertex'', ''terminal vertex'' or ''leaf'') is a vertex of degree 1.
An ''irreducible tree'' (or ''series-reduced tree'') is a tree in which there is no vertex of degree 2 (enumerated at sequence in the OEIS
A ''forest'' is an undirected graph in which any two vertices are connected by at most one path. Equivalently, a forest is an undirected acyclic graph, all of whose connected component
s are trees; in other words, the graph consists of a disjoint union
of trees. As special cases, the order-zero graph (a forest consisting of zero trees), a single tree, and an edgeless graph, are examples of forests.
Since for every tree , we can easily count the number of trees that are within a forest by subtracting the difference between total vertices and total edges. .
(or ''directed tree'' or ''oriented tree''
or ''singly connected network''
) is a directed acyclic graph
(DAG) whose underlying undirected graph is a tree. In other words, if we replace its directed edges with undirected edges, we obtain an undirected graph that is both connected and acyclic.
Some authors restrict the phrase "directed tree" to the case where the edges are all directed towards a particular vertex, or all directed away from a particular vertex (see arborescence
A ''polyforest'' (or ''directed forest'' or ''oriented forest'') is a directed acyclic graph whose underlying undirected graph is a forest. In other words, if we replace its directed edges with undirected edges, we obtain an undirected graph that is acyclic.
Some authors restrict the phrase "directed forest" to the case where the edges of each connected component are all directed towards a particular vertex, or all directed away from a particular vertex (see branching
A ''rooted tree'' is a tree in which one vertex has been designated the ''root''. The edges of a rooted tree can be assigned a natural orientation, either ''away from'' or ''towards'' the root, in which case the structure becomes a ''directed rooted tree''. When a directed rooted tree has an orientation away from the root, it is called an ''arborescence'' or ''out-tree''; when it has an orientation towards the root, it is called an ''anti-arborescence'' or ''in-tree''. The ''tree-order'' is the partial ordering
on the vertices of a tree with if and only if the unique path from the root to ''v'' passes through ''u''. A rooted tree T which is a subgraph
of some graph ''G'' is a normal tree
if the ends of every T-path in ''G'' are comparable in this tree-order . Rooted trees, often with additional structure such as ordering of the neighbors at each vertex, are a key data structure in computer science; see tree data structure
In a context where trees are supposed to have a root, a tree without any designated root is called a ''free tree''.
A ''labeled tree'' is a tree in which each vertex is given a unique label. The vertices of a labeled tree on ''n'' vertices are typically given the labels 1, 2, ..., ''n''. A ''recursive tree
'' is a labeled rooted tree where the vertex labels respect the tree order (i.e., if for two vertices ''u'' and ''v'', then the label of ''u'' is smaller than the label of ''v'').
In a rooted tree, the ''parent'' of a vertex ''v'' is the vertex connected to ''v'' on the path
to the root; every vertex has a unique parent except the root which has no parent. A ''child'' of a vertex ''v'' is a vertex of which ''v'' is the parent. An ''ascendant'' of a vertex ''v'' is any vertex which is either the parent of ''v'' or is (recursively) the ascendant of the parent of ''v''. A ''descendant'' of a vertex ''v'' is any vertex which is either the child of ''v'' or is (recursively) the descendant of any of the children of ''v''. A ''sibling'' to a vertex ''v'' is any other vertex on the tree which has the same parent as ''v''. A ''leaf'' is a vertex with no children. An ''internal vertex'' is a vertex that is not a leaf.
The ''height'' of a vertex in a rooted tree is the length of the longest downward path to a leaf from that vertex. The ''height'' of the tree is the height of the root. The ''depth'' of a vertex is the length of the path to its root (''root path''). This is commonly needed in the manipulation of the various self-balancing trees, AVL tree
s in particular. The root has depth zero, leaves have height zero, and a tree with only a single vertex (hence both a root and leaf) has depth and height zero. Conventionally, an empty tree (a tree with no vertices, if such are allowed) has depth and height −1.
A ''k-ary tree
'' is a rooted tree in which each vertex has at most ''k'' children. 2-ary trees are often called ''binary tree
s'', while 3-ary trees are sometimes called ''ternary tree
An ''ordered tree'' (or ''plane tree'') is a rooted tree in which an ordering is specified for the children of each vertex. This is called a "plane tree" because an ordering of the children is equivalent to an embedding of the tree in the plane, with the root at the top and the children of each vertex lower than that vertex. Given an embedding of a rooted tree in the plane, if one fixes a direction of children, say left to right, then an embedding gives an ordering of the children. Conversely, given an ordered tree, and conventionally drawing the root at the top, then the child vertices in an ordered tree can be drawn left-to-right, yielding an essentially unique planar embedding.
* Every tree is a bipartite graph
. A graph is bipartite if and only if it contains no cycles of odd length. Since a tree contains no cycles at all, it is bipartite.
* Every tree is a median graph
* Every tree with only countably
many vertices is a planar graph
* Every connected graph ''G'' admits a spanning tree
, which is a tree that contains every vertex of ''G'' and whose edges are edges of ''G''.
* Every connected graph with only countably
many vertices admits a normal spanning tree .
* There exist connected graphs with uncountably
many vertices which do not admit a normal spanning tree .
* Every finite tree with ''n'' vertices, with , has at least two terminal vertices (leaves). This minimal number of leaves is characteristic of path graph
s; the maximal number, , is attained only by star graph
s. The number of leaves is at least the maximal vertex degree.
* For any three vertices in a tree, the three paths between them have exactly one vertex in common (this vertex is called the ''median'' of these three vertices).
* Every tree has a center
consisting of one vertex or two adjacent vertices. The center is the middle vertex or middle two vertices in every longest path. Similarly, every ''n''-vertex tree has a centroid consisting of one vertex or two adjacent vertices. In the first case removal of the vertex splits the tree into subtrees of fewer than ''n''/2 vertices. In the second case, removal of the edge between the two centroidal vertices splits the tree into two subtrees of exactly ''n''/2 vertices.
states that there are ''n''''n''−2
trees on ''n'' labeled vertices. A classic proof uses Prüfer sequence
s, which naturally show a stronger result: the number of trees with vertices 1, 2, ..., ''n'' of degrees ''d''1
, ..., ''d''''n''
respectively, is the multinomial coefficient
A more general problem is to count spanning tree
s in an undirected graph
, which is addressed by the matrix tree theorem
. (Cayley's formula is the special case of spanning trees in a complete graph
.) The similar problem of counting all the subtrees regardless of size is #P-complete
in the general case ().
Counting the number of unlabeled free trees is a harder problem. No closed formula for the number ''t''(''n'') of trees with ''n'' vertices up to graph isomorphism
is known. The first few values of ''t''(''n'') are
: 1, 1, 1, 1, 2, 3, 6, 11, 23, 47, 106, 235, 551, 1301, 3159, … .
proved the asymptotic estimate
with the values ''C'' and ''α'' known to be approximately 0.534949606... and 2.95576528565... , respectively. (Here, means that .) This is a consequence of his asymptotic estimate for the number ''r''(''n'') of unlabeled rooted trees with ''n'' vertices:
with ''D'' around 0.43992401257... and the same ''α'' as above (cf. , chap. 18.104.22.168 and , chap. VII.5, p. 475).
The first few values of ''r''(''n'') are
: 1, 1, 2, 4, 9, 20, 48, 115, 286, 719, 1842, 4766, 12486, 32973, …
Types of trees
* A ''path graph
'' (or ''linear graph'') consists of ''n'' vertices arranged in a line, so that vertices ''i'' and ''i''+1 are connected by an edge for ''i''=1,...,''n''−1.
* A ''starlike tree
'' consists of a central vertex called ''root'' and several path graphs attached to it. More formally, a tree is starlike if it has exactly one vertex of degree greater than 2.
* A ''star tree
'' is a tree which consists of a single internal vertex (and leaves). In other words, a star tree of order ''n'' is a tree of order ''n'' with as many leaves as possible.
* A ''caterpillar tree
'' is a tree in which all vertices are within distance 1 of a central path subgraph.
* A ''lobster tree
'' is a tree in which all vertices are within distance 2 of a central path subgraph.
* A ''regular tree'' of degree ''d'' is the infinite tree with ''d'' edges at each vertex. These arise as the Cayley graph
s of free group
s, and in the theory of Tits buildings
* Tree structure
* Tree (data structure)
* Decision tree
* Unrooted binary tree