5 //#include <sys/types.h>
6 //#include <sys/stat.h>
29 #ifndef MAX_LABEL_LENGTH
30 #define MAX_LABEL_LENGTH 30
32 #ifndef NODE_LABEL_LENGTH
33 #define NODE_LABEL_LENGTH 30
35 #ifndef EDGE_LABEL_LENGTH
36 #define EDGE_LABEL_LENGTH 30
42 #define INPUT_SIZE 100
44 #ifndef MAX_INPUT_SIZE
45 #define MAX_INPUT_SIZE 100000
48 #define EPSILON 1.E-06
50 #ifndef ReadOpenParenthesis
51 #define ReadOpenParenthesis 0
66 #define XINDEX(i, j) n*(i - 1) - i*(i - 1)/2 + j - i - 1
70 char name[MAX_LABEL_LENGTH];
74 typedef struct pointers
81 char label[NODE_LABEL_LENGTH];
82 struct edge *parentEdge;
83 struct edge *leftEdge;
84 struct edge *middleEdge;
85 struct edge *rightEdge;
91 char label[EDGE_LABEL_LENGTH];
92 struct node *tail; /*for edge (u,v), u is the tail, v is the head*/
94 int bottomsize; /*number of nodes below edge */
95 int topsize; /*number of nodes above edge */
100 typedef struct tree {
101 char name[MAX_LABEL_LENGTH];
109 struct node *firstNode;
110 struct set *secondNode;
113 void me_b(double *X, int *N, char **labels, char **treeStr, int *nni);
114 void me_o(double *X, int *N, char **labels, char **treeStr, int *nni);
115 int whiteSpace(char c);
116 double **initDoubleMatrix(int d);
117 double **loadMatrix (double *X, char **labels, int n, set *S);
118 set *addToSet(node *v, set *X);
119 node *makeNewNode(char *label, int i);
120 node *makeNode(char *label, edge *parentEdge, int index);
121 node *copyNode(node *v);
122 edge *siblingEdge(edge *e);
123 edge *makeEdge(char *label, node *tail, node *head, double weight);
125 void updateSizes(edge *e, int direction);
126 tree *detrifurcate(tree *T);
127 void compareSets(tree *T, set *S);
128 void partitionSizes(tree *T);
129 edge *depthFirstTraverse(tree *T, edge *e);
130 edge *findBottomLeft(edge *e);
131 edge *moveRight(edge *e);
132 edge *topFirstTraverse(tree *T, edge *e);
133 edge *moveUpRight(edge *e);
134 void freeMatrix(double **D, int size);
135 void freeSet(set *S);
136 void freeTree(tree *T);
137 void freeSubTree(edge *e);
139 tree *readNewickString (char *str, int numLeaves);
140 node *decodeNewickSubtree(char *treeString, tree *T, int *uCount);
141 void NewickPrintSubtree(tree *T, edge *e, char *str);
142 void NewickPrintBinaryTree(tree *T, char *str);
143 void NewickPrintTrinaryTree(tree *T, char *str);
144 void NewickPrintTreeStr(tree *T, char *str);