elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.

 

 


Tema destacado: Curso de javascript por TickTack


+  Foro de elhacker.net
|-+  Programación
| |-+  Programación C/C++ (Moderadores: Eternal Idol, Littlehorse, K-YreX)
| | |-+  Árbol de Busqueda
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] Ir Abajo Respuesta Imprimir
Autor Tema: Árbol de Busqueda  (Leído 1,359 veces)
Chicha88

Desconectado Desconectado

Mensajes: 1


Ver Perfil
Árbol de Busqueda
« en: 11 Noviembre 2012, 13:53 pm »

Buenas!! Tengo un problema con un arbol, en este caso, aparte de los subárboles derecho e izquierdo, debo agregarle un tercero, y la verdad no entiendo como, aqui mi código:

Código:
#include <iostream>
using namespace std;

class Nodo
{
public:
int ele, nhijos;
Nodo *padre;
Nodo *izq;
Nodo *der;
Nodo();
};

Nodo::Nodo()
{
ele=0;
nhijos=0;
}

class ArbolBinario
{
public:
Nodo *raiz;
int cnodo, choja, con, sum, profu;
ArbolBinario();
void Insertar(int e);
//void Eliminar();
void Imprimir_Pre(Nodo *actual);
void Imprimir_Orden(Nodo *actual);
void Imprimir_Post(Nodo *actual);
void Busqueda(Nodo *actual, int e);
void Busqueda2(Nodo *actual, int e);
void Recorrer(Nodo *actual);
void Encontrar(Nodo *actual, int maymen);
};

ArbolBinario::ArbolBinario()
{
raiz=NULL;
cnodo=0;
choja=0;
sum=0;
profu=-999;
}

void ArbolBinario::Insertar(int e)
{
int nro=0;
Nodo *actual, *siguiente;
if (raiz==NULL)
{
Nodo *nuevo=new Nodo;
nuevo->ele=e;
nuevo->izq=NULL;
nuevo->der=NULL;
nuevo->padre=NULL;
raiz=nuevo;
sum+=e;
cnodo++;
}
else
{
actual=raiz;
siguiente=raiz;
Nodo *nuevo=new Nodo;
nuevo->ele=e;
nuevo->izq=NULL;
nuevo->der=NULL;
nuevo->padre=NULL;
actual->nhijos+=1;
while(e!=nro && siguiente!=NULL)
{
nro=siguiente->ele;
actual=siguiente;
if (e<nro)
{
siguiente=actual->izq;
}
else
{
siguiente=actual->der;
}
}
if (e==(actual->ele))
{
cout <<"Es un duplicado!\n";
}
else
{
cnodo++;
sum+=e;
//actual->nhijos+=1;
if (e<(actual->ele))
{
actual->izq=nuevo;
nuevo->padre=actual;
}
else
{
actual->der=nuevo;
nuevo->padre=actual;
}
}
}
}

void ArbolBinario::Imprimir_Pre(Nodo *actual)
{
if (actual==NULL)
{
return;
}
else
{
cout <<actual->ele<<"\n";
Imprimir_Pre(actual->izq);
Imprimir_Pre(actual->der);
}
}

void ArbolBinario::Imprimir_Orden(Nodo *actual)
{
if (actual==NULL)
{
return;
}
else
{
Imprimir_Orden(actual->izq);
cout <<actual->ele<<"\n";
Imprimir_Orden(actual->der);
}
}

void ArbolBinario::Imprimir_Post(Nodo *actual)
{
if (actual==NULL)
{
return;
}
else
{
Imprimir_Post(actual->izq);
Imprimir_Post(actual->der);
cout <<actual->ele<<"\n";
}
}

void ArbolBinario::Busqueda(Nodo *actual, int e)
{
Nodo *papa=NULL, *abuelo=NULL;
if (actual==NULL)
{
cout <<"No se encontro el elemento!\n";
return;
}
else
{
papa=actual->padre;
if (papa!=NULL)
{
abuelo=papa->padre;
}
if (actual->ele==e)
{
cout <<"El elemento "<<actual->ele<<" fue encontrado!\n";
if (papa!=NULL) cout <<"El padre del mismo es: "<<papa->ele;
if (abuelo!=NULL) cout <<"\nEl abuelo es: "<<abuelo->ele;
cout <<"\n";
}
else if (e>actual->ele)
{
Busqueda(actual->der, e);
}
else
{
Busqueda(actual->izq, e);
}
}
}

void ArbolBinario::Busqueda2(Nodo *actual, int e)
{
Nodo *antecesor=NULL;
if (actual==NULL)
{
cout <<"No se encontro el elemento!\n";
return;
}
else
{
if (actual->ele==e)
{
cout <<actual->ele<<"\n";
antecesor=actual->padre;
while (antecesor!=NULL)
{
cout <<antecesor->ele<<"\n";
antecesor=antecesor->padre;
}
}
else if (e>actual->ele)
{
Busqueda2(actual->der, e);
}
else
{
Busqueda2(actual->izq, e);
}
}
}

void ArbolBinario::Recorrer(Nodo *actual)
{
Nodo *antecesor=NULL;
if (actual==NULL)
{
return;
}
else
{
if (actual->izq==NULL && actual->der==NULL)
{
con=0;
choja++;
antecesor=actual->padre;
while (antecesor!=NULL)
{
con++;
antecesor=antecesor->padre;
}
con++;
if (con>profu)
{
profu=con;
}
}
Recorrer(actual->izq);
Recorrer(actual->der);
}

}

void ArbolBinario::Encontrar(Nodo *actual, int maymen)
{
Nodo *sucesor, *antecesor;
antecesor=actual;
if (maymen==1)
{
sucesor=actual->izq;
while (sucesor!=NULL)
{
antecesor=sucesor;
sucesor=sucesor->izq;
}
cout <<"El menor elemento es: "<<antecesor->ele;
}
else
{
sucesor=actual->der;
while (sucesor!=NULL)
{
antecesor=sucesor;
sucesor=sucesor->der;
}
cout <<"El mayor elemento es: "<<antecesor->ele;
}
cout <<"\n";
}

Basicamente es esto lo que debe realizar mi arbol ternario, desde ya muchas gracias!


« Última modificación: 11 Noviembre 2012, 16:11 pm por Chicha88 » En línea

Páginas: [1] Ir Arriba Respuesta Imprimir 

Ir a:  

Mensajes similares
Asunto Iniciado por Respuestas Vistas Último mensaje
Mi arbol
Diseño Gráfico
Azielito 1 2,369 Último mensaje 4 Marzo 2004, 02:28 am
por StraTovario
Arbol AVL
Java
arkaos 6 18,939 Último mensaje 31 Mayo 2009, 05:33 am
por arkaos
MOVIDO: Arbol binario de busqueda
ASM
Eternal Idol 0 2,644 Último mensaje 15 Septiembre 2009, 19:18 pm
por Eternal Idol
Problemas con imprimir un arbol binario de busqueda junto a una lista simple!!
Programación C/C++
01munrra 1 5,171 Último mensaje 23 Junio 2011, 02:24 am
por BlackZeroX
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines