void tree2array(struct tnode *p) { if(p != NULL) { tree2array(p->left); if(array_index < MAXNUM) word_array[array_index++] = p; tree2array(p->right); } }
//random trees void randtree_C(double *a, double *b, int *maxS, double *ansS, double *ansR) { struct bintree *R = rRtree (b[0], maxS[0]);//new struct bintree; struct bintree *S = rStree (a[0], maxS[0]);//new struct bintree; //setTree(1.0, S); //setTree(1.0, R); //struct bintree *S = newtree(1); //struct bintree *R = newtree(1); //R = rRtree (b[0], maxS[0]); //S = rStree (a[0], maxS[0]); tree2array(S, ansS, maxS[0], 0); tree2array(R, ansR, maxS[0], 0); deleteTree(S); deleteTree(R); }
//compute the n., r. and v. tree given two vectors (with N rows) of s and h indexes void allTrees_C(int *s, int *h, int * maxS, int *N, double * nvec, double * rvec, double * vvec) { struct bintree * n = new struct bintree; struct bintree * r = new struct bintree; struct bintree * v = new struct bintree; setTree(1.0, n); setTree(1.0, r); setTree(1.0, v); //struct bintree *n = newtree(1); //struct bintree *r = newtree(1); //struct bintree *v = newtree(1); array2tree(nvec, maxS[0], n); array2tree(rvec, maxS[0], r); array2tree(vvec, maxS[0], v); allTrees(s, h, *maxS, *N, n, r, v); tree2array(r, rvec, maxS[0], 0); tree2array(n, nvec, maxS[0], 0); tree2array(v, vvec, maxS[0], 0); deleteTree(n); deleteTree(r); deleteTree(v); }
int main(int argc, char *argv[]) { struct tnode *root = NULL; char word[MAXWORD]; while(getword(word, MAXWORD) != EOF) { //printf("%s\n", word); if(isalpha(word[0])) root = addtree(root, word); } tree2array(root); sort_array(); print_array(); return 0; }
// compute the weigths given a tree void computeprob_C(double *S, double * R, int *maxS, double *a, double *b, double *ans, int *root) { struct bintree *Stree = new struct bintree; struct bintree *Rtree = new struct bintree; setTree(1.0, Stree); setTree(1.0, Rtree); /// struct bintree *Stree = newtree(1); // struct bintree *Rtree = newtree(1); // struct bintree *anstree = newtree(1); if(root[0]==0) S[0] = 0; array2tree(S, maxS[0], Stree); array2tree(R, maxS[0], Rtree); struct bintree *anstree = computeprob(Stree, Rtree, a[0], b[0], maxS[0], 1); tree2array(anstree, ans, maxS[0], 0); deleteTree(Stree); deleteTree(Rtree); deleteTree(anstree); }