

tree2cl <- function(tree, filename) {

  tree <- as.phylo(tree)
  
  fp <- file(filename, open="w")

  n.labels <- length(tree$tip.label)
  for (node in unique(tree$edge[,1])) {
    idx <- tree$edge[,1] == node
    edges <- tree$edge[idx, ]
    sizes <- tree$edge.length[idx]
    n <- length(sizes)
    if (n < 2) stop("Node with less than two daughters")
    if (n > 3) stop("Node with more than three daughters")
    if (n == 3) {
      cat(sprintf(":: %i %g %g %g\n", node, sizes[1], sizes[2], sizes[3]), file = fp)
    } else {
      cat(sprintf(": %i %g %g\n", node, sizes[1], sizes[2]), file = fp)
    }
    for (i in 1:n) {
      if (edges[i,2] > n.labels) {
        cat(sprintf("C %i\n", edges[i,2]), file = fp)
      } else {
        cat(sprintf("L %s\n", tree$tip.label[edges[i,2]]), file = fp)
      }
    }
  }

  close(fp)
}

