void initrav(node *p) { /* traverse to initialize */ if (p->tip) return; nodeinit(p); initrav(p->next->back); initrav(p->next->next->back); } /* initrav */
void nodeinit(node *p) { /* initialize a node */ node *q, *r; long i, j, m; if (p->tip) return; q = p->next->back; r = p->next->next->back; nodeinit(q); nodeinit(r); m = 0; for (i = 0; i < loci; i++) { for (j = 1; j < alleles[i]; j++) p->view[m+j-1] = 0.5 * q->view[m+j-1] + 0.5 * r->view[m+j-1]; m += alleles[i]; } if ((!lengths) || p->iter) p->v = 0.1; if ((!lengths) || p->back->iter) p->back->v = 0.1; } /* nodeinit */
void initrav(node *p) { /* traverse to initialize */ node* q; if (p->tip) nodeinit(p->back); else { q = p->next; while ( q != p) { initrav(q->back); q = q->next; } } } /* initrav */