ClubEnsayos.com - Ensayos de Calidad, Tareas y Monografias
Buscar

Arbol en c


Enviado por   •  5 de Mayo de 2020  •  Apuntes  •  1.528 Palabras (7 Páginas)  •  92 Visitas

Página 1 de 7

#include <stdio.h>

#include <stdlib.h>

#include <string.h>

#include <conio.h>

#include <windows.h>

struct Nodo

{

int arb;

char nombre[40];

Nodo *no;

Nodo *arbool;

};

Nodo* crearNodo(int id, char* n);

Nodo* realizar (Nodo* p, int registro);

void insertar (Nodo** raiz, int registro, char* nombre);

void reemplazar(Nodo** act);

void borrar (Nodo** raiz, int registro);

void visualizar (Nodo* r, int x, int y);

int profundidad (Nodo *raiz);

void gotoxy(int x,int y);

int x=10, y=5;

Nodo* crearNodo(int id, char *n){

Nodo *t;

t = (Nodo*)malloc(sizeof(Nodo));

t->arb=id;

strcpy(t->nombre, n);

t->no=NULL;

t->arbool=NULL;

return(t);

}

Nodo* realizar (Nodo* raiz, int registro){

int encontrado = 0;

while (!encontrado && raiz != NULL){

if (registro == raiz->arb)

encontrado = 1;

else if (registro < raiz->arb)

raiz = raiz->no;

else if (registro > raiz->arb)

raiz = raiz->arbool;

}

return raiz;

}

void insertar (Nodo** raiz, int registro, char *nombre){

if (!(*raiz))

*raiz = crearNodo(registro, nombre);

else

if (registro < (*raiz)->arb)

insertar (&((*raiz)->no),registro, nombre);

else

insertar (&((*raiz)->arbool),registro, nombre);

}

void borrar (Nodo** r, int registro){

if (!(*r))

printf("no encontrado\n");

else

if (registro < (*r)->arb)

borrar(&(*r)->no, registro);

else

if (registro> (*r)->arb)

borrar(&(*r)->arbool,registro);

else{

Nodo* q;

q = (*r);

if (q -> no == NULL)

(*r) = q -> arbool;

else

if (q -> arbool == NULL)

(*r) = q -> no;

else{

reemplazar(&q);

}

free(q);

printf("%d eliminado\n", registro);

}

}

void reemplazar(Nodo** act){

Nodo* a, *p;

p = *act;

a = (*act)->no;

while (a->arbool){

p = a;

a = a -> arbool;

}

(*act)->arb=a->arb;

strcpy((*act)->nombre,a->nombre);

if (p == (*act))

p->no = a -> no;

else

p->arbool = a -> no;

(*act) = a;

}

void visualizar (Nodo* r, int x, int y){

if (r){

gotoxy(x,y);

printf("k:%d, d:%s\n",r->arb,r->nombre);

x=x-5;

y=y+5;

visualizar(r -> no,x,y);

x=x+10;

visualizar(r -> arbool,x,y);

...

Descargar como (para miembros actualizados) txt (5 Kb) pdf (43 Kb) docx (11 Kb)
Leer 6 páginas más »
Disponible sólo en Clubensayos.com