Exemplo n.º 1
0
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;
}
Exemplo n.º 2
0
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);
}