arbolbinario
Publicado por jose (1 intervención) el 21/10/2017 13:57:54
necesito saber por que en este metodo de eliminar en mi arbol no me elimina por favor espero sus respuestas
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
Nodo *Arbol::eliminar(Nodo *pRaiz, int pDato) {
if (pRaiz != NULL)
{ // hay nodos
Nodo *ptrTemp = 0;
if (pDato < pRaiz->dato) { // el dato por parametro es menor al valor que ya esta en el nodo del arbol
pRaiz->ptrIzquierda == eliminar(pRaiz->ptrIzquierda, pDato); // vamos a mandar lo que tenga el nodo a la izquieda y el dato a eliminar
}
else if (pDato > pRaiz->dato) { // el dato por parametro es menor al valor que ya esta en el nodo del arbol
pRaiz->ptrDerecha == eliminar(pRaiz->ptrDerecha, pDato); // vamos a mandar lo que tenga el nodo a la izquieda y el dato a eliminar
}
else // si
{
if (pRaiz->ptrIzquierda == pRaiz->ptrDerecha) {// si son iguales entonces es un nodo hoja
delete pRaiz;
pRaiz = NULL;
return pRaiz;
}
else {
if (pRaiz->ptrDerecha == NULL) { // un nodo con hijo izquierda
ptrAux = pRaiz->ptrIzquierda;
delete pRaiz;
return ptrAux;
}
else if (pRaiz->ptrIzquierda == NULL) { // un nodo con un hijo a la derecha
ptrAux = pRaiz->ptrDerecha;
delete pRaiz;
return ptrAux;
}
else
ptrAux = pRaiz->ptrIzquierda;
if (ptrAux->ptrDerecha) { // si hay nodos a la derecha
while (ptrAux->ptrDerecha != NULL) {
ptrTemp = ptrAux;
ptrAux = ptrAux->ptrDerecha;// va a ser igual a lo que tenga a la recha
}
pRaiz->dato = ptrAux->dato; // reemplazo
ptrTemp->ptrDerecha = ptrAux->ptrIzquierda; // asigna null o se asigna al nodo reemplazo
}// si hay nodos a la izquierda
else {
pRaiz->dato = ptrAux->dato;// remplazo
pRaiz->ptrIzquierda = ptrAux->ptrIzquierda;
}
delete ptrAux;
ptrAux = NULL;
ptrTemp = NULL;
}
} //son iguales
} // hay nodos
else
cout << "No hay nodos creados o no se encontro el dato a eliminar" << endl;
return pRaiz;
}
Valora esta pregunta


0