Está en la página 1de 3

#include <iostream>

#include <conio.h>
#include <stdlib.h>
using namespace std;

struct NodoArbol
{
int dato; // el dato de ste nodo
NodoArbol *izquierdo; // puntero del subarbol izquierdo
NodoArbol *derecho; // puntero del subarbol derecho
};
//prototipos de las funciones
void menu();
NodoArbol *crearNodo(int);
int contarNodos(NodoArbol *Raiz);
void insertarNodo(NodoArbol *&,int);
void mostrarArbol(NodoArbol *, int);
void preOrden(NodoArbol *Raiz);
void postOrden(NodoArbol *Raiz);
void inOrden(NodoArbol *Raiz);
//creamos un arbol
NodoArbol *arbol=NULL; //al arbol creado lo inicializamos en null

int main(){ //funcion princuipal


menu();
getch();
return 0;
}
//funcion de menu
void menu(){
int dato,opcion,contador=0;
do{
cout <<"\t.:MENU:."<<endl;
cout <<" 1.Insertar un nuevo nodo"<<endl;
cout <<" 2.Mostrar el arbol completo"<<endl;
cout <<" 3.Contar Nodos en el Arbol"<<endl;
cout <<" 4.Mostrar el arbol en PreOrden"<<endl;
cout <<" 5.Mostrar el arbol en PostOrden"<<endl;
cout <<" 6.Mostrar el arbol en InOrden"<<endl;
cout <<" 7.Salir"<<endl;
cout <<" Opcion: ";
cin >> opcion;
switch(opcion){
case 1: cout<<"\nDigite un numero entero: ";
cin >> dato;
insertarNodo(arbol,dato); //insertamos un nuevo nodo
cout <<"\n"; //salto de linea
system ("pause");
break;
case 2: cout <<"\nMostrando el arbol completo: \n\n";
mostrarArbol(arbol,contador);
cout <<"\n";
system ("pause");
break;
case 3: cout <<"\nHay ";
cout<<contarNodos(arbol);
if(contarNodos(arbol)==1)
{
cout <<" Nodo en el arbol\n\n";
}
else
{
cout <<" Nodos en el arbol\n\n";
}
system ("pause");
break;
case 4: cout <<"\nMostrando el arbol en PreOrden: ";
preOrden(arbol);
cout <<"\n";
system ("pause");
break;
case 5: cout <<"\nMostrando el arbol en PostOrden: ";
postOrden(arbol);
cout <<"\n";
system ("pause");
break;
case 6: cout <<"\nMostrando el arbol en InOrden: ";
inOrden(arbol);
cout <<"\n";
system ("pause");
break;
case 7: break;
default: cout << "\n .:ERROR:.\nSeleccione una Opcion valida\n\n";
system ("pause");
break;
}
system("cls");
}while(opcion!=7);
}

//funcion para crear un nuevo nodo


NodoArbol *crearNodo(int n){
NodoArbol *nuevo_nodo=new NodoArbol(); // se a reservado un espacio en la
memoria new
nuevo_nodo->dato=n;
nuevo_nodo->izquierdo=NULL;
nuevo_nodo->derecho=NULL;
return nuevo_nodo;
}
//funcion para insertar nodo elementosen el arbol
void insertarNodo(NodoArbol *&arbol, int n)
{
if(arbol==NULL){ //si el arbol esta vacio
NodoArbol *nuevo_nodo=crearNodo(n);
arbol=nuevo_nodo; //se asigna
}
else{//si el arbol tiene un nodo o mas
int valorRaiz=arbol->dato;//se obtiene el valor
if(n<valorRaiz){//si el elemento es menor
insertarNodo(arbol->izquierdo,n);
}
else{ //si el elemento es mayor a la raiz
insertarNodo(arbol->derecho,n);
}
}
}
//funcion para mostrar el arbol completo
void mostrarArbol(NodoArbol *arbol, int cont)
{
if (arbol==NULL) //si el arbol sta vacio
return;
else{
mostrarArbol(arbol->derecho, cont+1);
for(int i=0;i<cont;i++){//el ciclo sirve para dejar un
espacio entre un nodo y otro
cout<<" ";
}
cout <<arbol->dato<<endl;//muestra los nodos del lado dercho
mostrarArbol(arbol->izquierdo, cont+1);
}
}
int contarNodos(NodoArbol *Raiz)
{
if(Raiz==NULL)
{
return 0;
}
else
{
int count = 1;
count += contarNodos(Raiz ->izquierdo);
count += contarNodos(Raiz ->derecho);
return count;
}
}
void preOrden(NodoArbol *Raiz)
{
if(Raiz!=NULL)
{
cout<< Raiz->dato<<" ";
preOrden(Raiz ->izquierdo);
preOrden(Raiz ->derecho);
}
}
void postOrden(NodoArbol *Raiz)
{
if(Raiz!=NULL)
{
postOrden(Raiz ->izquierdo);
postOrden(Raiz ->derecho);
cout<< Raiz->dato<<" ";
}
}
void inOrden(NodoArbol *Raiz)
{
if(Raiz!=NULL)
{
inOrden(Raiz ->izquierdo);
cout<< Raiz->dato<<" ";
inOrden(Raiz ->derecho);
}
}

También podría gustarte