Dev - C++ - arbolbinario

 
Vista:

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
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder