Arbol en c
Enviado por Jose Garcia • 5 de Mayo de 2020 • Apuntes • 1.528 Palabras (7 Páginas) • 102 Visitas
#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);
...