ARBOL_1.c



// CREACION E IMPRESION DE UN ARBOL BINARIO

#include <stdio.h>
#include <stdlib.h>


struct nodo
{
	int numero;
	struct nodo *raiz, *izq, *der;
};

struct nodo *Arbol = NULL;

struct nodo *CreaNodo(int x)
{
	struct nodo *new = (struct nodo *)malloc(sizeof(struct nodo));
	new->raiz = new->izq = new->der = NULL;
	new->numero = x;
	return new;
}

void Guardar(struct nodo *Tree, struct nodo *new)
{
	if ( !Arbol ) Arbol = new;
	else
	{
		if ( new->numero > Tree->numero )
		{
			if ( Tree->der )// hay algo a la der
			{
				Tree = Tree->der;
				Guardar(Tree, new);
			}
			else
			{
				Tree->der = new;
				new->raiz = Tree;
			}
		}
		else
		{
			if ( Tree->izq )
			{
				Tree = Tree->izq;
				Guardar(Tree, new);
			}
			else
			{
				Tree->izq = new;
				new->raiz = Tree;
			}
		}
	}
}

void print_InOrden(struct nodo *Tree)
{
	if ( Tree->izq ) print_InOrden(Tree->izq);
	printf("%d\t", Tree->numero);
	if ( Tree->der ) print_InOrden(Tree->der);
}

void inicio(void)
{
	int n=0, numeros[] = {15, 18, 7, 3, 4, 19, 2,
	16, 0, 12, 11, 31, 17, 22};
	struct nodo *new;
	
	while(n<14)
	{
		new = CreaNodo(numeros[n]);
		Guardar(Arbol, new);
		n++;
	}
	print_InOrden(Arbol); printf("\n");
}

int main (int n, char **a) { inicio(); }


/*
PRE-ORDEN		+ 3 4 = 7
IN-ORDEN (entre-orden)	3 + 4 = 7
POST-ORDEN		3 4 + = 7



*/