treepack
treepack,
an Octave code which
defines, analyzes, and manipulates trees,
a simple kind of graph with no circuits.
Special cases include rooted and binary trees.
Representations include adjacency, arc, Pruefer code,
and parent.
Operations include center, diameter, eccentricity, enumeration,
generation one at a time, random selection, traversal.
A graph is a collection of objects or "nodes", such that any (unordered)
pair of nodes is connected or not connected. If a pair of nodes i and
j are connected, we say there is an "edge" between them, and we may describe
the edge as (i,j). A graph can be represented by a drawing
of dots with lines connecting some of the dots.
A tree is a minimally connected graph; more precisely, it is a graph
with two additional properties:
-
it is connected, that is, given any two pair of nodes i
and j, there is a sequence of edges (na,nb),(nb,nc),...(nx,ny),(ny,nz)
such that na=i and nz=j;
-
if any edge is removed from the graph, it is no longer connected.
Note that a tree using N nodes will have exactly N-1 edges.
There are several ways to represent a graph on the computer.
For the TREE_ARC representation, we simply store a list of the edges
of the tree, that is, pairs of nodes.
For the TREE_PRUEFER representation, a tree of N nodes
is represented by a sequence of N-2 integers known as the
Pruefer code.
For the TREE_PARENT representation, a tree of N nodes
is represented by a list of nodes PARENT, such that, for I = 1 to N - 1,
the I-th edge of the tree connects node I to node PARENT(I).
For the TREE_ROOTED representation, a tree is assumed to have the additional
property that one node has been designated as the "root".
For the TREE_RB representation, a tree is assumed to have the additional
properties that one node has been designated as the "root", and that every node
has exactly 1 or 2 edges.
Licensing:
The information on this web page is distributed under the MIT license.
Languages:
treepack is available in
a C version and
a C++ version and
a Fortran77 version and
a Fortran90 version and
a MATLAB version and
an Octave version.
Related Data and Programs:
treepack_test
combo,
an Octave code which
includes routines for ranking, unranking, enumerating and
randomly selecting balanced sequences, cycles, graphs, Gray codes,
subsets, partitions, permutations, restricted growth functions,
Pruefer codes and trees.
graph_representation,
a data directory which
contains examples of ways of representing abstract
mathematical graphs
grf,
a data directory which
contains a description of the GRF format and some examples.
grf_io,
an Octave code which
reads and writes GRF files.
subset,
an Octave code which
generates, ranks and unranks various combinatorial objects.
Reference:
-
Alan Gibbons,
Algorithmic Graph Theory,
Cambridge University Press, 1985,
ISBN: 0-5212-8881-9,
LC: QA166.G53.
-
Hang Tong Lau,
Combinatorial Heuristic Algorithms with Fortran,
Springer, 1986,
ISBN: 3540171614,
LC: QA402.5.L37.
-
Albert Nijenhuis, Herbert Wilf,
Combinatorial Algorithms for Computers and Calculators,
Second Edition,
Academic Press, 1978,
ISBN: 0-12-519260-6,
LC: QA164.N54.
-
Robert Sedgewick,
Algorithms in C,
Addison-Wesley, 1990,
ISBN: 0-201-51425-7,
LC: QA76.73.C15S43.
-
Dennis Stanton, Dennis White,
Constructive Combinatorics,
Springer, 1986,
ISBN: 0387963472,
LC: QA164.S79.
-
Krishnaiyan Thulasiraman, M Swamy,
Graphs: Theory and Algorithms,
John Wiley, 1992,
ISBN: 0471513563,
LC: QA166.T58.
Source Code:
-
catalan.m,
computes the Catalan numbers, from C(0) to C(N).
-
graph_adj_edge_count.m,
counts the number of edges in a graph.
-
graph_adj_is_node_connected.m,
determines if a graph is nodewise connected.
-
graph_adj_is_tree.m,
determines whether a graph is a tree.
-
graph_arc_degree.m,
determines the degree of the nodes of a graph.
-
graph_arc_is_tree.m,
determines whether a graph is a tree.
-
graph_arc_node_count.m,
counts the number of nodes in a graph.
-
graph_arc_print.m,
prints out a graph from an edge list.
-
graph_arc_to_graph_adj.m,
converts an arc list graph to an adjacency graph.
-
i4_uniform_ab.m,
returns a scaled pseudorandom I4 between A and B.
-
i4vec_heap_d.m,
reorders an I4VEC into an descending heap.
-
i4vec_indicator.m,
sets an I4VEC to the indicator vector.
-
i4vec_print.m,
prints an I4VEC.
-
i4vec_sort_heap_a.m,
ascending sorts an I4VEC using heap sort.
-
i4vec_sorted_unique_count.m,
counts the unique elements in a sorted I4VEC.
-
pruefer_to_tree_arc.m,
is given a Pruefer code, and computes the tree.
-
pruefer_to_tree_2.m,
produces the edge list of a tree from its Pruefer code.
-
tree_arc_center.m,
computes the center, eccentricity, and parity of a tree.
-
tree_arc_diam.m,
computes the "diameter" of a tree.
-
tree_arc_random.m,
selects a random labeled tree and its Pruefer code.
-
tree_arc_to_pruefer.m,
is given a labeled tree, and computes its Pruefer code.
-
tree_enum.m,
enumerates the labeled trees on NNODE nodes.
-
tree_parent_next.m,
generates, one at a time, all labeled trees.
-
tree_parent_to_arc.m,
converts a tree from parent to arc representation.
-
tree_rb_enum.m,
returns the number of rooted binary trees with N nodes.
-
tree_rb_lex_next.m,
generates rooted binary trees in lexicographic order.
-
tree_rb_to_parent.m,
converts rooted binary tree to parent node representation.
-
tree_rb_yule.m,
adds two nodes to a rooted binary tree using the Yule model.
-
tree_rooted_code.m,
returns the code of a rooted tree.
-
tree_rooted_code_compare.m,
compares a portion of the code for two rooted trees.
-
tree_rooted_depth.m,
returns the depth of a rooted tree.
-
tree_rooted_enum.m,
counts the number of unlabeled rooted trees.
-
tree_rooted_random.m,
selects a random unlabeled rooted tree.
-
vec_next.m,
generates all N-vectors of integers modulo a given base.
-
vec_random.m,
selects a random N-vector of integers modulo a given base.
Last revised on 20 June 2024.