Arboles binarios en C++

Les dejo un viejo apunte de la universidad
Para descargar de clic en descargar
 
ARBOLES.CPP
 
   1: #include 

   2: #include 

   3: #include 

   4: #include 

   5:  

   6: typedef int tipodatoarbol;

   7: typedef struct nodo {

   8:    tipodatoarbol dato;

   9:    struct nodo *izq;

  10:     struct nodo *der;

  11: } tipoNodo;

  12: typedef tipoNodo *pNodo;

  13:  

  14: void insertar(pNodo *l,tipodatoarbol Dato);

  15: void inicializar(pNodo *l);

  16: void eliminar(pNodo *l, tipodatoarbol d);

  17: void preorden(pNodo *l);

  18: void inorden(pNodo *l);

  19: void postorden(pNodo *l);

  20:  void menu(pNodo *l);

  21: void inicio(pNodo *l);

  22: void agregar(pNodo *l);

  23: void quitar(pNodo *l);

  24:  

  25: void main()

  26: {

  27:   pNodo arbol;

  28:   menu(&arbol);

  29: }

  30:  

  31: void menu(pNodo *l)

  32: {  int op;

  33:    clrscr();

  34:    gotoxy(33,7);cout<<"ARBOL BINARIO";

  35:    gotoxy(32,9);cout<<"1) Inicializar";

  36:    gotoxy(32,11);cout<<"2) Insertar";

  37:    gotoxy(32,13);cout<<"3) Eliminar";

  38:    gotoxy(32,15);cout<<"4) Imprimir";

  39:    gotoxy(32,17);cout<<"5) Salir";

  40:    do{

  41:      gotoxy(33,19);cout<<"Opcion [ ] ";

  42:      gotoxy(41,19);cin>>op;

  43:    }while (op>5 || op<1);

  44:  

  45:    switch(op)

  46:    {

  47:      case 1:

  48:       inicio(l);

  49:       break;

  50:      case 2:

  51:       agregar(l);

  52:       break;

  53:      case 3:

  54:       quitar(l);

  55:       break;

  56:      case 4:

  57:       clrscr();

  58:       gotoxy(10,16);cout<<" Inorden: ";inorden(l);

  59:       gotoxy(10,17);cout<<" Preorden: ";preorden(l);

  60:       gotoxy(10,18);cout<<" Postorden: ";postorden(l);

  61:       getch();

  62:       menu(l);

  63:       break;

  64:      case 5:

  65:       exit(0);

  66:    }

  67:    getch();

  68: }

  69:  

  70: void inicio(pNodo *l)

  71: { clrscr();

  72:   inicializar(l);

  73:   menu(l);

  74: }

  75:  

  76: void agregar(pNodo *l)

  77: { clrscr();

  78:   int D;

  79:   //char opc='s';

  80:   gotoxy(30,20);cout<<"Insertar numero: "; cin>>D;

  81:     insertar(l,D);

  82:    // cout<>opc;

  83:  // }while(opc=='s' ||opc=='S');

  84:   menu(l);

  85: }

  86: void quitar(pNodo *l)

  87: { clrscr();

  88:   int D;

  89:   //char opc='s';

  90:   //do{

  91:     gotoxy(30,20);cout<<"Numero a eliminar: "; cin>>D;

  92:     eliminar(l,D);

  93:     //gotoxy(12,8);cprintf("\nDesea Eliminar otro dato (S/N): "); cin>>opc;

  94:   //}while(opc=='s' ||opc=='S');

  95:   menu(l);

  96: }

  97:  

  98: // FUNCIONES BASICAS

  99: void inicializar(pNodo *l)

 100: {

 101:  *l=NULL;

 102: }

 103:  

 104: //insertar

 105: void insertar(pNodo *l,tipodatoarbol Dato){

 106:     pNodo Nuevo, Aux;

 107:     int b;

 108:     Nuevo=(pNodo)malloc(sizeof(tipoNodo));

 109:     Nuevo->dato= Dato;

 110:     Nuevo->der=NULL;

 111:     Nuevo->izq=NULL;

 112:     Aux=*l;

 113:      if (*l==NULL){

 114:      *l=Nuevo;

 115:     }

 116:     else if (*l!=NULL)

 117:     {

 118:      b=0;

 119:      while(b==0)

 120:     {

 121:     if(Nuevo->datodato)

 122:      {

 123:      while(Aux->izq!=NULL&&Nuevo->datodato)

 124:         { Aux=Aux->izq;}

 125:        if(Nuevo->datodato&&Aux->izq==NULL)

 126:         {Aux->izq=Nuevo;

 127:         b=1;

 128:         }

 129:       else {if(Nuevo->dato>Aux->dato&&Aux->der==NULL)

 130:       {Aux->der=Nuevo;

 131:       b=1;

 132:         } }

 133:      }

 134:      else

 135:        if(Nuevo->dato>Aux->dato)

 136:      {

 137:  

 138:      while(Aux->der!=NULL&&Nuevo->dato>Aux->dato)

 139:         { Aux=Aux->der;}

 140:        if(Nuevo->datodato&&Aux->izq==NULL)

 141:         {Aux->izq=Nuevo;

 142:         b=1;

 143:         }

 144:       else if(Nuevo->dato>Aux->dato&&Aux->der==NULL)

 145:       {Aux->der=Nuevo;

 146:       b=1;

 147:          }

 148:      } }

 149:       }

 150:  

 151: }

 152:  

 153: void eliminar(pNodo *l,tipodatoarbol d)

 154: {

 155:  if(*l==NULL)

 156:  {

 157:   gotoxy(30,20);cout<<"Arbol vacio";

 158:   getch();

 159:  }

 160:  else

 161:  {

 162:   pNodo aux,ant;

 163:   aux=*l;

 164:    while(aux->dato!=d&&(aux->izq!=NULL||aux->der!=NULL))

 165:    {

 166:    if(ddato)

 167:    {

 168:     ant=aux;

 169:     aux=aux->izq;

 170:    }

 171:    else

 172:    {

 173:     ant=aux;

 174:     aux=aux->der;

 175:    }

 176:   }

 177:   if(aux->dato==d)

 178:   {

 179:    if(aux==*l&&aux->izq==NULL&&aux->der==NULL)

 180:    {

 181:     inicializar(l);

 182:    }

 183:    else

 184:    {

 185:     if(aux->izq!=NULL&&aux->der!=NULL)

 186:     {

 187:      ant=aux;

 188:      aux=aux->izq;

 189:      if(aux->der==NULL)

 190:      {

 191:       ant->dato=aux->dato;

 192:       ant->izq=aux->izq;

 193:      }

 194:      else

 195:      {

 196:       pNodo ant2;

 197:       while(aux->der!=NULL)

 198:       {

 199:        ant2=aux;

 200:        aux=aux->der;

 201:       }

 202:       ant->dato=aux->dato;

 203:       if(aux->izq==NULL)

 204:       {

 205:        ant2->der=NULL;

 206:       }

 207:       else

 208:       {

 209:        ant2->der=aux->izq;

 210:       }

 211:      }

 212:     free(aux);

 213:    }

 214:    else

 215:     if(aux->izq!=NULL||aux->der!=NULL)

 216:     {

 217:      if(aux->izq!=NULL)

 218:      {

 219:       if(aux->datodato)

 220:       {

 221:        if(aux==*l)

 222:     *l=aux->izq;

 223:        else

 224:     ant->izq=aux->izq;

 225:       }

 226:       else

 227:       {

 228:        if(aux==*l)

 229:     *l=aux->izq;

 230:        else

 231:        ant->der=aux->izq;

 232:       }

 233:      }

 234:      else

 235:      {

 236:       if(aux->datodato)

 237:       {

 238:        if(aux==*l)

 239:     *l=aux->der;

 240:        else

 241:     ant->izq=aux->der;

 242:       }

 243:       else

 244:       {

 245:        if(aux==*l)

 246:     *l=aux->der;

 247:        else

 248:     ant->der=aux->der;

 249:       }

 250:      }

 251:      free(aux);

 252:     }

 253:     else

 254:      if(aux->izq==NULL&&aux->der==NULL)

 255:      {

 256:       if (aux->datodato)

 257:        ant->izq=NULL;

 258:       else

 259:        ant->der=NULL;

 260:       free(aux);

 261:      }

 262:     }

 263:    }

 264:    else

 265:    {

 266:     gotoxy(30,20);cout<<"Numero no existente";

 267:     getch();

 268:    }

 269:  }

 270: }

 271: void preorden(pNodo *l){

 272:   pNodo Aux,*l2;

 273:   Aux=*l;

 274:   if(*l!=NULL){

 275:     cout<<" "<dato;

 276:     *l2=Aux->izq;

 277:     preorden(l2);

 278:     *l2=Aux->der;

 279:     preorden(l2);

 280:   }

 281: }

 282:  

 283:  

 284: void inorden(pNodo *l){

 285:   pNodo Aux,*l2;

 286:   Aux=*l;

 287:   if(*l!=NULL){

 288:     *l2=Aux->izq;

 289:     inorden(l2);

 290:     cout<<" "<dato;

 291:     *l2=Aux->der;

 292:     inorden(l2);

 293:   }

 294: }

 295:  

 296: void postorden(pNodo *l){

 297:   pNodo Aux,*l2;

 298:   Aux=*l;

 299:   if(*l!=NULL){

 300:     *l2=Aux->izq;

 301:     postorden(l2);

 302:     *l2=Aux->der;

 303:     postorden(l2);

 304:     cout<<" "<dato;

 305:   }

 306: }

 307:  

Anuncios

Responder

Introduce tus datos o haz clic en un icono para iniciar sesión:

Logo de WordPress.com

Estás comentando usando tu cuenta de WordPress.com. Cerrar sesión /  Cambiar )

Google+ photo

Estás comentando usando tu cuenta de Google+. Cerrar sesión /  Cambiar )

Imagen de Twitter

Estás comentando usando tu cuenta de Twitter. Cerrar sesión /  Cambiar )

Foto de Facebook

Estás comentando usando tu cuenta de Facebook. Cerrar sesión /  Cambiar )

Conectando a %s