Buenas tardes compañeros vengo a molestarlosun poco, es que estoy haciendo una eliminacion de nodos de un arbol binario pero no se que me este quedando mal, agredeceria su ayuda.
arbol *arbol::eliminar(arbol *raiz){
arbol *a,*aux,*bor;
int dato;
cout<<"INGRESE EL VALOR A CONSULTAR: ";
cin>>dato;
cout<<endl;
aux=raiz;
int c=0;
while(aux!=NULL){
if(dato==aux->dato){
cout<<"EL DATO PERTENECE AL ARBOL\n";
cout<<"NIVEL : "<<c;
break;
}else{
if(dato>aux->dato){
aux=aux->der;
c++;
}else{
if(dato<aux->dato){
aux=aux->izq;
c++;
}
}
}
}
if(aux->izq==NULL&&aux->der==NULL){
delete aux;
}else{
if(aux->izq!=NULL&&aux->der==NULL){
bor=aux;
aux=aux->izq;
delete bor;
}else{
if(aux->der!=NULL&&aux->izq==NULL){
bor=aux;
aux=aux->der;
delete bor;
}
}
}
}
Agradeceria mucho su ayuda!!
Pon, con tus propias palabras, qué quieres conseguir.
Quiere buscar un dato en un arbol y si lo encuentra quitarlo; la idea es de forma de ir rapidamente encontrando todos los valores de un conjunto (supongo no se repiten) y quitarlos de esa bolsa.
Supongo que si usara la estructura set seria mas lenta en las operacion de busqueda (seguro) y eliminacion de los elementos porque el arbol binario es una estructura donde los datos estan ordenados..
Lo que tienes que hacer el liberar la memoria y hacer que el campo anterior al eliminado apunte al que va después del que eliminas.
Saludos.
Para nodos con usa sola rama sí, pero si tienen dos esta solución no es suficiente.
Para el siguiente árbol:
5
3 7
2 4 6 8
Si se elimina el 3 debe quedar así:
5
2 7
4 6 8
Pero si se elimina el 5 debe quedar así:
3
2 7
4 6 8
Depende de a lo que este aplicado el árbol :laugh: y de su estructura.
Te recomiendo te pases por aquí:
https://www.youtube.com/watch?v=kjYKBEUB0y0