void bNNItopSwitch (edge *e, int direction, double **A) { edge *down, *swap, *fixed; node *u, *v; if (verbose > 2 && !isBoostrap) { if (LEFT == direction) Debug ( (char*)"Performing branch swap across edge '%s' with left subtree.", e->label); else Debug ( (char*)"Performing branch swap across edge '%s' with right subtree.", e->label); } down = siblingEdge (e); u = e->tail; v = e->head; if (LEFT == direction) { swap = e->head->leftEdge; fixed = e->head->rightEdge; v->leftEdge = down; } else { swap = e->head->rightEdge; fixed = e->head->leftEdge; v->rightEdge = down; } swap->tail = u; down->tail = v; if (e->tail->leftEdge == e) u->rightEdge = swap; else u->leftEdge = swap; bNNIupdateAverages (A, v, e->tail->parentEdge, down, swap, fixed); return; }
void bNNItopSwitch(meTree *T, meEdge *e, int direction, double **A) { meEdge *down, *swap, *fixed; meNode *u, *v; if (verbose) { printf("Performing branch swap across edge %s ",e->label); printf("with "); if (LEFT == direction) printf("left "); else printf("right "); printf("subtree.\n"); } down = siblingEdge(e); u = e->tail; v = e->head; if (LEFT == direction) { swap = e->head->leftEdge; fixed = e->head->rightEdge; v->leftEdge = down; } else { swap = e->head->rightEdge; fixed = e->head->leftEdge; v->rightEdge = down; } swap->tail = u; down->tail = v; if(e->tail->leftEdge == e) u->rightEdge = swap; else u->leftEdge = swap; bNNIupdateAverages(A, v, e->tail->parentEdge, down, swap, fixed); }