Trees |
Definition (Tree). A tree is a simple connected graph with no cycles. A graph is a forest if each of its connected components is a tree.
Example.
\(P_4,\;S_5\), and \(T\) are trees and \(G\) is a forest.
Remark.
In 1857, Aurther Caeley used trees to enumerate the isomers of saturated hydrocarbons \(C_nH_{2n+2}\). For example, butane \(C_4H_{10}\)
has two isomers and they look like trees where atoms and atomic bonds represent vertices and edges respectively. Applications of trees include
organizing a sequence of decisions and creating file directories in a computer and least expensive communication network.
Theorem.
Let \(G\) be a simple graph on \(n\) vertices. Then the following are true.
Corollary. A tree \(T\) with at least 2 vertices is a bipartite graph and hence \(\chi(T)=2\).
Definition (Spanning tree). A spanning tree of a graph \(G\) is a subgraph that is a tree containing all the vertices of \(G\). A spanning forest of a graph \(G\) is a subgraph that is a forest containing all the vertices of \(G\).
There may be a lot of spanning trees of a connected graph. Kirchhoff's theorem or matrix tree theorem provides the number of spanning trees in terms of
nonzero eigenvalues of the Laplacian matrix of a graph.
Theorem (Matrix tree theorem).
Let \(G\) be a simple graph on \(n\) vertices and \(L\) be the Laplacian matrix of \(G\) with eigenvalues \(0=\mu_1\leq \mu_2\leq \cdots \leq \mu_n\).
Then the number \(t(G)\) of spanning trees of \(G\) is
\[t(G)=\det\left(L(i)\right)=\frac{\mu_2\cdot \mu_3 \cdots \mu_n}{n},\]
for all \(i=1,2,\ldots,n\).
Example.
The Laplacian matrix \(L\) of the paw graph \(G\) has eigenvalues \(0,1,3,4\). By matrix tree theorem, the number of its spanning trees is
\[\det\left(L(2)\right)=\det \left[\begin{array}{rrr}
1&0&0\\
0&2&-1\\
0&-1&2
\end{array}\right]=\frac{1\cdot 3 \cdot 4}{4}=3.\]
Remark.
How do we find a spanning tree of a connected graph? Choose a cycle and delete one edge. Do it for all cycles, one at a time.
Problem.
Find the number of edges whose removal from a connected graph \(G\) on \(n\) vertices and \(m\) edges produces a spanning tree of \(G\).
Solution. Let \(x\) be the required number of edges to be deleted to get a spanning tree of a connected graph \(G\) on \(n\) vertices and \(m\) edges.
Since a spanning tree on \(n\) vertices has \(n-1\) edges, we have \(m-x=n-1\). Thus \(x=m-n+1\).
Theorem.
A graph \(G\) is connected if and only if \(G\) has a spanning tree.
Deleting edges from cycles to produce a spanning tree is inefficient as we have to identify cycles at each step. There are two better algorithms:
depth-first search (backtracking) and breadth-first search.
We illustrate breadth-first search by an example. First we need the following definition.
Definition (Rooted tree).
A rooted tree is a tree in which one vertex is specified as the root. The level of a vertex \(v\) in a rooted tree is the length of
the unique path from \(v\) to the root.
Problem.
Use breadth-first search to produce a spanning tree \(T\) for the above graph \(G\). Choose \(a\) as the root of \(T\).
Solution.
Start with vertex \(a\), the root. For the level 1 vertices, choose all the neighbors of \(a\) and add edges joining \(a\) and its neighbors.
So we get \(b\) and \(c\) as the level 1 vertices (in alphabetical order) and edges \(\{a,b\}\) and \(\{a,c\}\).
For the level 2 vertices, choose all the neighbors of \(b\) and \(c\), that are not already chosen, and order them (alphabetically for this problem).
For this graph, \(d\) is the only vertex in level 2. Join the first vertex in level 1, i.e., \(b\), and its neighbors in level 2.
\(b\) is not adjacent to the only vertex \(d\) in level 2. Then join the second vertex in level 1, i.e., \(c\), and its neighbors in level 2 that are not
already chosen. So we get \(\{c,d\}\).
For the level 3 vertices, choose all the neighbors of \(d\), that are not already chosen, and add edges joining \(d\) and its neighbors in level 3.
So we get \(e\) and \(f\) as the level 3 vertices (in alphabetical order) and edges \(\{d,e\}\) and \(\{d,f\}\).
For the level 4 vertices, choose all the neighbors of \(e\) and \(f\), that are not already chosen, and order them. We get \(g\), \(h\), and \(j\) as
the level 4 vertices. Join the first vertex in level 3, i.e., \(e\), and its neighbors in level 4. So we get \(\{e,g\}\) and \(\{e,h\}\).
Then join the second vertex in level 3, i.e., \(f\), and its neighbors in level 4 that are not already chosen. So we get \(\{f,j\}\).
Continuing this process, we get \(\{h,i\}\) and a tree \(T\). Since tree \(T\) contains all the vertices of \(G\), \(T\) is a spanning tree of \(G\).
Last edited