Given a linear network which is a tree (acyclic graph), this function assigns a label to each vertex, indicating its position in the tree.
treebranchlabels(L, root = 1)
Linear network (object of class "linnet"
).
The network must have no loops.
Root of the tree. An integer index identifying
which point in vertices(L)
is the root of the tree.
A vector of character strings, with one entry for each point in
vertices(L)
.
The network L
should be a tree, that is, it must have no loops.
This function computes a character string label for each vertex
of the network L
. The vertex identified by root
(that is, vertices(L)[root]
) is taken as the root of the tree
and is given the empty label ""
.
If there are several line
segments which meet at the root vertex, each of these segments is the
start of a new branch of the tree; the other endpoints of these
segments are assigned the labels
"a"
, "b"
, "c"
and so on.
If only one segment issues from the root vertex,
the other endpoint of this segment is assigned the empty label
""
.
A similar rule is then applied to each of the newly-labelled vertices.
If the vertex labelled "a"
is joined to two other unlabelled
vertices, these will be labelled "aa"
and "ab"
.
The rule is applied recursively until all vertices have been labelled.
If L
is not a tree, the algorithm will terminate, but the
results will be nonsense.
deletebranch
, extractbranch
,
treeprune
for manipulating a network using the
branch labels.
linnet
for creating a network.
# NOT RUN {
# make a simple tree
m <- simplenet$m
m[8,10] <- m[10,8] <- FALSE
L <- linnet(vertices(simplenet), m)
plot(L, main="")
# compute branch labels
tb <- treebranchlabels(L, 1)
tbc <- paste0("[", tb, "]")
text(vertices(L), labels=tbc, cex=2)
# }
Run the code above in your browser using DataLab