no logro avanzar de ahi me serviria mucho su ayuda o consejos gracias
eliminar un solo dato del arbol
y despues que se eliminen todos los datos del arbol
Código
#include<stdio.h> #include<windows.h> struct nodo{ double dato; nodo *derecho; nodo *izquierdo; nodo *padre; }; nodo *arbol=NULL; //--------------------------elliminar dato---------------------------------- void eliminar(nodo*arbol,double num) { if(arbol ==NULL) { return; } else if(num<arbol ->dato) { eliminar(arbol->izquierdo,num); } else if(num>arbol->dato) { eliminar(arbol-> derecho,num); } else { eliminarnodo(arbol); } } //-------------------------------------------------------------------------- nodo*minimo(nodo*arbol) { if(arbol ==NULL) { return NULL; } if(arbole->izquierdo) { return minimo(arbol->izquierdo); } else { return arbol; } } //---------------------------------------------------------------- void reemplazar(nodo *arbol,nodo* nuevonodo) { if(arbol->padre) { if(arbol->dato =arbol->padre->izquierdo->dato) { arbol->padre->padre->izquierdo=nuevonodo; } else if(arbol->dato==arbol->padre->derecho->dato) { arbol->padre->derecho=nuevonodo; } } if(nuevonodo) { nuevonodo->padre=arbol->padre; } } //-------------------------------------------------------------------------- void destruirnodo(nodo *nodo) { nodo->izquierdo=NULL; nodo->derecho=NULL; delete nodo; } //--------------------------------------------------------------------------- void eliminarnodo(nodo*nodoeliminar) { if(nodoeliminar->izquerdo && nodoeliminar->derecho) { nodo*menor=minimo(nodoeliminar->derecho); nodoeliminar->dato=menor->dato; eliminarnodo(menor); } else if(nodoeliminar->izquierdo) { reemplazar(nodoeliminar,nodoeliminar->izquierda); destruirnodo(nodoeliminar); } else if(nodoeliminar->derecho) { reemplazar(nodoeliminar,nodoeliminar->derecho); destruirnodo(nodoeliminar); } } //--------------------------CONSULTAR DATOS--------------------------------- bool consultar(nodo *arbol, double num){ if(arbol == NULL) { return false; } else if(arbol->dato == num) { return true; } else if(num < arbol->dato) { return consultar(arbol->izquierdo, num); } else { return consultar(arbol->derecho, num); } } //--------------------------MOSTRAR DATOS--------------------------------- void mostrar(nodo *arbol, double cont) { if(arbol==NULL) { return; } else { mostrar(arbol->derecho, cont+1); for(int i=0;i<cont; i++) mostrar(arbol->izquierdo, cont+1); } } //------------------------------------------------------------------------- nodo * crear(double num) { nodo * nuevonodo = new nodo(); nuevonodo->dato = num; nuevonodo->derecho = NULL; nuevonodo->izquierdo = NULL; return nuevonodo; } //---------------------------INSERTAR DATOS-------------------------------- void insertar(nodo *&arbol, double num) { if(arbol == NULL) { nodo *nuevonodo = crear(num); arbol = nuevonodo; } else { int raiz=arbol->dato; if(num < raiz) insertar(arbol->izquierdo, num); else { insertar(arbol->derecho, num); } } } //------------------------------MENU----------------------------------------------------- void menu() { int opc, cont=0; double num; char resp; do{ do{ if(opc<1 || opc>6); }while(opc<1 || opc>6); switch(opc){ case 1: do{ insertar(arbol, num); do { if(resp != 'S' && resp != 'N') }while(resp != 'S' && resp != 'N'); }while(resp=='S'); break; case 2: mostrar(arbol, cont); break; case 3: do{ if(consultar(arbol, num) == true) { } else { } do { if(resp != 'S' && resp != 'N') }while(resp != 'S' && resp != 'N'); }while(resp=='S'); break; case 4: eliminar(arbol,num); default: } }while(opc != 6); } main() { menu(); return 0; }