arbol binario de busqueda

Iniciado por danielSoccer, 11 Noviembre 2016, 02:08 AM

0 Miembros y 1 Visitante están viendo este tema.

danielSoccer

Quisiera que alguien me colaborara con alguna funcion con el codigo que les voy a mostrar que muestre el valor mayor y menor de los nodos almacenados y mostrar el nivel de un nodo(el nivel del nodo es consultado por teclado) se los agradeceria muchas gracias
Código (cpp) [Seleccionar]
#include <iostream>
#include <stdlib.h>

using namespace std;

/*---------  Estructura del arbol  -------*/
typedef struct nodo{
int nro;
struct nodo *izq, *der;
}*ABB;

int numNodos = 0; // nummero de nodos del arbol ABB



/* ---------- Estructura de la cola ---------*/
struct nodoCola{
ABB ptr;
struct nodoCola *sgte;
};
struct cola{
struct nodoCola *delante;
struct nodoCola *atras;
};

void inicializaCola(struct cola &q)
{
q.delante = NULL;
q.atras = NULL;
}

void encola(struct cola &q, ABB n)
{
struct nodoCola *p;
p = new(struct nodoCola);
p->ptr = n;
p->sgte = NULL;
if(q.delante==NULL)
  q.delante = p;
else
(q.atras)->sgte = p;
q.atras = p;
}

ABB desencola(struct cola &q)
{
struct nodoCola *p;
p = q.delante;
ABB n = p->ptr;
q.delante = (q.delante)->sgte;
delete(p);
return n;
}

ABB crearNodo(int x)
{
ABB nuevoNodo = new(struct nodo);
nuevoNodo->nro = x;
nuevoNodo->izq = NULL;
nuevoNodo->der = NULL;

return nuevoNodo;
}
void insertar(ABB &arbol, int x)
{
if(arbol==NULL)
{
arbol = crearNodo(x);
cout<<"\n\t  Insertado..!"<<endl<<endl;
}
else if(x < arbol->nro)
insertar(arbol->izq, x);
else if(x > arbol->nro)
insertar(arbol->der, x);
}

void preOrden(ABB arbol)
{
if(arbol!=NULL)
{
cout << arbol->nro <<" ";
preOrden(arbol->izq);
preOrden(arbol->der);
}
}

void enOrden(ABB arbol)
{
if(arbol!=NULL)
{
enOrden(arbol->izq);
cout << arbol->nro << " ";
enOrden(arbol->der);
}
}

void postOrden(ABB arbol)
{
if(arbol!=NULL)
{
enOrden(arbol->izq);
enOrden(arbol->der);
cout << arbol->nro << " ";
}
}

void verArbol(ABB arbol, int n)
{
if(arbol==NULL)
  return;
verArbol(arbol->der, n+1);

for(int i=0; i<n; i++)
cout<<"   ";

numNodos++;
cout<< arbol->nro <<endl;

verArbol(arbol->izq, n+1);
}

bool busquedaRec(ABB arbol, int dato)
{
int r=0;   // 0 indica que lo encontre

if(arbol==NULL)
  return r;

if(dato<arbol->nro)
  r = busquedaRec(arbol->izq, dato);
 
else if(dato> arbol->nro)
r = busquedaRec(arbol->der, dato);

else
r = 1;   // son iguales, lo encontre

return r;
}

ABB unirABB(ABB izq, ABB der)
{
if(izq==NULL) return der;
if(der==NULL) return izq;

ABB centro = unirABB(izq->der, der->izq);
izq->der = centro;
der->izq = izq;
return der;
}

void elimina(ABB &arbol, int x)
{
if(arbol==NULL) return;

if(x<arbol->nro)
  elimina(arbol->izq, x);
else if(x>arbol->nro)
elimina(arbol->der, x);

else
{
ABB p = arbol;
arbol = unirABB(arbol->izq, arbol->der);
delete p;
}
}



void recorrerxNivel(ABB arbol)
{
struct cola q;
inicializaCola(q);
cout << "\t";

if(arbol!=NULL)
{
encola(q, arbol);

while(q.delante!=NULL)
{
arbol = desencola(q);
cout << arbol->nro << ' ';

if(arbol->izq!=NULL)
  encola(q, arbol->izq);
  if(arbol->der!=NULL)
 encola(q, arbol->der);
}
}
}







void menu()
{
//system("cls");
cout << "\n\t\t  ..[ ARBOL BINARIO DE BUSQUEDA ]..  \n\n";
cout << "\t [1]  Insertar elemento                  \n";
cout << "\t [2]  Mostrar arbol                      \n";
cout << "\t [3]  Recorridos de profundiad           \n";
cout << "\t [4]  Buscar elemento                    \n";
cout << "\t [5]  Eliminar elemento                  \n";
cout << "\t [6]  Recorrido por nieveles (Amplitud)  \n";
   cout << "\t [7]  Nodos menores de 'k'               \n";
cout << "\t [11] SALIR                              \n";

cout << "\n\t Ingrese opcion : ";
}

void menu2()
{
system("cls");
cout << endl;
cout << "\t [1] En Orden     \n";
cout << "\t [2] Pre Orden    \n";
cout << "\t [3] Post Orden   \n";
cout << "\n\t     Opcion :  ";
}

int main()
{
ABB arbol = NULL;
int x;
int op, op2;


//system("color f9");   // poner color a la consola
do
{
menu();  cin>> op;
cout << endl;

switch(op)
{
case 1:
cout << " Ingrese valor : ";  cin>> x;
insertar( arbol, x);
break;

case 2:
verArbol(arbol, 0);
break;

case 3:
menu2();  cin>> op2;

if(arbol!=NULL)
{
switch(op2)
{
case 1:
enOrden(arbol); break;
case 2:
preOrden(arbol); break;
case 3:
postOrden(arbol); break;
}
}
else
  cout << "\n\t Arbol vacio..!";
break;

case 4:
bool band;

cout<<" Valor a buscar: "; cin>> x;

band = busquedaRec(arbol,x);

if(band==1)
  cout << "\n\tEncontrado...";
else
cout << "\n\tNo encontrado...";
break;

case 5:
cout<<" Valor a eliminar: "; cin>> x;
elimina(arbol, x);
cout << "\n\tEliminado..!";
break;

case 6:
cout<<"\n\n Mostrando recorrido por amplitud\n\n";
recorrerxNivel(arbol);
break;






case 8:
exit(0);
}

cout<<"\n\n\n";
system("pause");
}while(op!=8);

}






El que tenga la funcion le recompensare con paypal xbox live o dinero real (y)

Mod: Los códigos deben ir en etiquetas GeSHi, no escribir en mayúsculas, no hagas doble post