Documentos de Académico
Documentos de Profesional
Documentos de Cultura
de izquierdaderecha. Finalmente, existe un recorrido llamado nivel p o r nivel, en el que los nodos del rbol se visitan por niveles a partir del 0, y de izquierda a derecha. Este algoritmo puede plantearse iterativamente, utilizando una fila de la siguiente manera: 1. Inserte el apuntador al nodo raz a una fila. 2. Mientras la fila no se vace: Saque el apuntador de la fila y procese el nodo sealado. Inserte en la fila los apuntadores de los hijos del nodo procesado (si stos existen). Programa de rboles Binarios
// Arboles_Binarios.cpp : main project file. #include"stdafx.h" #include"iostream" using namespace System; using namespace std; class nodoarbol { public: int info; nodoarbol *der, *izq; nodoarbol() { izq=NULL; der=NULL;
};
raiz=NULL; -ABB() { cout "Entro al destructor "endl; borrar_nodos(raiz); cout"Salgo del destructor "endl ;
void insertar()
} {
nodoarbol *auxl, *aux2, *aux3; auxl=new nodoarbol; aux2=raiz; aux3=NULL; cout"Entre el valor del nodo a insertar:"; cin>>auxl->info; while(aux2!=NULL) { aux3=aux2; if(auxl->info>aux2->info) aux2=aux2->der; else aux2=aux2->izq; if(aux3==NULL) raiz=auxl; else if (auxl->info<aux3->info) aux3->izq=auxl; else aux3->der=auxl;
nodoarbol *devolver_raiz() {
return raiz;
void eliminar_nodo(int valor) { nodoarbol *auxl, *aux2, *temp; bool b; // Inicio de la busqueda del nodo a eliminar if(raiz!=NULL) { auxl=raiz; aux2=NULL; while(auxl->info!=valor) { aux2=auxl; if(valor<auxl->info) auxl=auxl->izq; else auxl=auxl->der; if(auxl==NULL)
19
break;
// Fin de la busqueda del nodo a eliminar. // En auxl queda la direccin del nodo a eliminar. // En aux2 queda la direccin del nodo padre del nodo a // eliminar if(auxl!=NULL) { //Cuando no tiene hijos temp=auxl; if((auxl->izq==NULL)&&(auxl->der==NULL)) { if(aux2!=NULL) { if(auxl->info>aux2->info) aux2->der=NULL; else aux2->izq=NULL;
else {
else { if((auxl->izq!=NULL)&&(auxl->der!=NULL)) { //Cuando tiene dos hijos aux2=auxl; //con el predecesor temp=auxl->izq; b=true; while(temp->der!=NULL) { aux2=temp; temp=temp->der; b=false;
raiz=NULL;
else { //cuando tiene un solo hijo if(auxl->izq==NULL) if(aux2!=NULL) { if(auxl->info<aux2->info) aux2->izq=auxl->der ; else aux2->der=auxl->der; else raiz=auxl->der;
else aux2->der=NULL;
20
else if(aux2!=NULL) { if(auxl->info<aux2->info) aux2->izq=auxl->izq;
};
delete temp;
else raiz=auxl->izq;
else aux2->der=auxl->izq;
void main() { nodoarbol *raiz; char resp; int valor; ABB n; do { n.insertar (); cout"Desea crear otro nodo (s/n):"; cin>>resp; coutendl; resp=tolower(resp); }while(resp!='n'); cout"LOS NODOS DEL ARBOL (inorden) SON "endl; raiz=n.devo!ver_raiz(); n.despliega(raiz); do { cout<<"Entre el valor del nodo a eliminar"endl; cin>>valor; n.eliminar_nodo(valor); coutendl; cout"LOS NODOS DEL ARBOL (inorden) SON"endl; raiz=.devolver_raiz(); n.despliega(raiz); cout"Desea eliminar otro nodo (s/n) : "endl; cin>>resp; cout<<endl; resp=tolower(resp); }while(resp! = 'n*) ;