Skip to content

Instantly share code, notes, and snippets.

@crowl
Created May 31, 2016 04:32
Show Gist options
  • Save crowl/e633baddedf53520c945083861886951 to your computer and use it in GitHub Desktop.
Save crowl/e633baddedf53520c945083861886951 to your computer and use it in GitHub Desktop.
// PARA TI MARTÍN c:
#include <stdlib.h>
#include <stdio.h>
struct abb {
int valor;
struct abb *izq, *der;
};
typedef struct abb nodo;
void
insertar(nodo **arbol, int val) {
nodo *temp = NULL;
if(!(*arbol)) {
temp = (nodo *)malloc(sizeof(nodo));
temp->izq = temp->der = NULL;
temp->valor = val;
*arbol = temp;
return;
}
if(val < (*arbol)->valor) {
insertar(&(*arbol)->izq, val);
} else if(val > (*arbol)->valor) {
insertar(&(*arbol)->der, val);
}
}
void imprimir_preorden(nodo *arbol) {
if (arbol) {
printf("%d\n",arbol->valor);
imprimir_preorden(arbol->izq);
imprimir_preorden(arbol->der);
}
}
void
imprimir_inorden(nodo *arbol) {
if (arbol) {
imprimir_inorden(arbol->izq);
printf("%d\n",arbol->valor);
imprimir_inorden(arbol->der);
}
}
void
imprimir_postorden(nodo *arbol) {
if (arbol) {
imprimir_postorden(arbol->izq);
imprimir_postorden(arbol->der);
printf("%d\n",arbol->valor);
}
}
void liberar_arbol(nodo *arbol) {
if (arbol != NULL) {
liberar_arbol(arbol->izq);
liberar_arbol(arbol->der);
free(arbol);
}
}
nodo* buscar(nodo **arbol, int val) {
if(*arbol == NULL){
return NULL;
}
if(val < (*arbol)->valor) {
buscar(&((*arbol)->izq), val);
} else if(val > (*arbol)->valor) {
buscar(&((*arbol)->der), val);
} else if(val == (*arbol)->valor) {
return *arbol;
}
}
void
main() {
nodo *raiz = NULL;
insertar(&raiz, 9);
insertar(&raiz, 4);
insertar(&raiz, 15);
insertar(&raiz, 6);
insertar(&raiz, 12);
insertar(&raiz, 17);
insertar(&raiz, 2);
printf("Pre Orden:\n");
imprimir_preorden(raiz);
printf("\n");
printf("In Orden:\n");
imprimir_inorden(raiz);
printf("\n");
printf("Post Orden:\n");
imprimir_postorden(raiz);
printf("\n");
// Buscar nodo 4 en el arbol
nodo *tmp = buscar(&raiz, 4);
if (tmp) {
printf("Nodo %d encontrado!\n", tmp->valor);
} else {
printf("Nodo no existe en el arbol.\n");
}
// liberar memoria
liberar_arbol(raiz);
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment