Asuntos Oficiales > C/C++

 Arbol de busqueda..!

(1/1)

Chicha88:
:ayuda: 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: C++ ---#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!
 :gracias:

Navegación

[0] Índice de Mensajes

Ir a la versión completa