All pastes #2077022 Raw Edit

Stuff

public text v1 · immutable
#2077022 ·published 2011-06-09 00:20 UTC
rendered paste body
struct imaginaria
{
      struct Doctor* doc;
      struct imaginaria* sig;

};
void reatar_doctores(struct Doctor* doc)
{

 struct imaginaria* head = NULL;

 if(doc)
 {
   reatar_doctores(doc->izq);
   reatar_doctores(doc->der);

   copiarlista(doc,&head);
   reenlazarlista(&head);
   desunirenlaces(&doc);
 }
}

void desunirenlaces(struct Doctor** doc)
{

  if(!(*doc))
  {
	  /* Recursividad Post-Orden */

	  desunirenlaces(&(*doc)->izq);
	  desunirenlaces(&(*doc)->der);
	  (*doc)->ant=NULL;
  }
}

void reenlazarlista(struct imaginaria** base)
{
  struct Doctor *aux = NULL, *aux1 = NULL, *aux2 = NULL, *aux3 = NULL;
  struct imaginaria* raiz = NULL;

  raiz =* base;

    while(raiz)
    {
        aux  = raiz->doc;
        aux1 = raiz->sig->doc;
        aux2 = raiz->sig->sig->doc;
        aux3 = raiz->sig->sig->sig->doc;

          /* Verifica que si hay un izquierdo y no un derecho. */

          if(((aux1->izq == aux) && (!(aux2->der == aux))) && ((((aux1->izq) == aux))))
          {
               raiz->sig->sig->doc->ant = raiz->doc;
          }

          /* Enlazo con izquierdo m‡s cercano */

          if((aux2->izq == aux) && (!(aux3->der == aux)) && (aux2->izq == aux))
          {
             raiz->sig->sig->sig->doc->ant = raiz->doc;
          }

          raiz = raiz->sig;
    }
}

void copiarlista(struct Doctor* doc, struct imaginaria** head)
{
 struct imaginaria* nueva = NULL;
 nueva = (struct imaginaria*) malloc(sizeof(struct imaginaria));
 nueva->sig = NULL;
 nueva->doc = doc;
 hacerlista(&(*head), nueva);
 }

void hacerlista(struct imaginaria** head, struct imaginaria* nueva)
{

  struct imaginaria* aux = *head;

  /* Si no existe cabeza, "nueva" pasar‡ a ser ella */

  if (!(*head))
  {
	  	  *head = nueva;
  } else {

      while(aux)
      {
               /* agregamos al final de la lista, para esto, la recorremos */

    	  	    if(!aux->sig)
                {
                        aux->sig = nueva;
			            aux = nueva;
                }

                aux = aux->sig;

                }
      }
}