Guest User

Untitled

a guest
Nov 24th, 2017
75
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 4.67 KB | None | 0 0
  1. #include <iostream>
  2. #include <string>
  3. using namespace std;
  4. class listaAdy;
  5. class nodoV;
  6. class nodoArc;
  7. typedef struct reg{
  8. string nombre;
  9. float x;
  10. float y;
  11. listaAdy Ady;
  12. };
  13.  
  14. typedef class nodoV {
  15. public:
  16. nodoV *hIzq, *hDer;//Declaracion del nodo con sus dos hijos.
  17. reg estado;
  18. };
  19. class nodoArc{
  20. public:
  21. nodoV *Vert;
  22. nodoArc *sig;
  23. };
  24.  
  25. class listaAdy{
  26. public:
  27.  
  28. nodoArc *primerarco;
  29.  
  30. public:
  31.  
  32. void crearlista (){
  33. primerarco=NULL;
  34. }
  35.  
  36. void insertarenlista (nodoV *k){
  37. nodoArc *nodonuevo, *apuntadoraux;
  38. nodonuevo=new nodoArc;
  39. if (nodonuevo != NULL){
  40. nodonuevo->Vert=k;
  41. nodonuevo->sig=NULL;
  42. if(primerarco==NULL){
  43. primerarco=nodonuevo;
  44. }else{
  45. apuntadoraux=primerarco;
  46. while(apuntadoraux->sig!=NULL){
  47. apuntadoraux=apuntadoraux->sig;
  48. }
  49. apuntadoraux->sig=nodonuevo;
  50. }
  51. }
  52.  
  53. }
  54.  
  55. void mostrarlista (){
  56. nodoArc *apuntadoraux;
  57. int i;i=1;
  58. apuntadoraux=primerarco;
  59. while(apuntadoraux!=NULL){
  60. cout<<"La cuidad tiene relacion con: "<<apuntadoraux->Vert->estado.nombre<<endl;
  61. apuntadoraux=apuntadoraux->sig;
  62. i++;
  63. }
  64.  
  65. }
  66.  
  67. };
  68.  
  69.  
  70.  
  71. class arbin {
  72. public:
  73. nodoV *Raiz; //Raiz del arbol.
  74. int cont;
  75.  
  76. creararbol(){ //Inicializacion del arbol para que quede vacío.
  77. Raiz=NULL;
  78. cont=0;
  79. }
  80.  
  81. buscar (string e, nodoV *&actual, nodoV *&anterior){ // Función buscar: Esta funcion es llamada desde insertar para ahorrar recorridos y optimizar el programa ya que informara si existe o no, un elemento no puede estar duplicado.
  82. bool encontrado;
  83. encontrado=false;
  84. anterior=NULL;
  85. actual=Raiz;
  86. while(!(encontrado)&&(actual!=NULL)){
  87. if(actual->estado.nombre==e){
  88. encontrado=true;
  89. }else{
  90. anterior=actual;
  91. if(actual->estado.nombre > e){
  92. actual=actual->hIzq;
  93. }else{
  94. actual=actual->hDer;
  95. }
  96. }
  97. }
  98. if(!(encontrado)){
  99. cout<<"No se encontro el elemento"<<endl;
  100. }
  101. else{
  102. cout<<"El elemento existe"<<endl;
  103. }
  104. }
  105.  
  106. insertar (reg estado){
  107. nodoV *nuevo, *actual, *anterior;//Funcion insertar.
  108. buscar(estado.nombre,actual,anterior);// <- En esta parte usamos buscar, en actual se alojara la posicion de la ultima hoja a la cual le agregaremos el hijo y en anterior se alojara su padre.
  109. if(actual!=NULL){
  110. cout<<"elemento duplicado"<<endl;
  111. }else{
  112. nuevo = new nodoV;
  113. nuevo->estado=estado;
  114. nuevo->hDer=NULL;
  115. nuevo->hIzq=NULL;
  116. if(anterior==NULL){Raiz=nuevo;}else{
  117. if(anterior->estado.nombre > estado.nombre){
  118. anterior->hIzq=nuevo;
  119. }else{
  120. anterior->hDer=nuevo;
  121. }
  122. }
  123. }
  124. }
  125.  
  126. eliminar (string x){
  127. nodoV *n, *actual, *anterior, *aux,*aux2,*aux3,*aux4;
  128. buscar(x, actual, anterior);
  129. aux=actual;
  130. if(actual==NULL){
  131. cout<<"Elemento inexistente"<<endl;
  132. }else{
  133. if((actual->hIzq == NULL)&&(actual->hDer==NULL)){
  134. if(anterior->hDer==actual){anterior->hDer=NULL;}
  135. if(anterior->hIzq==actual){anterior->hIzq=NULL;}
  136. }
  137. if((actual->hIzq!=NULL)&&(actual->hDer==NULL)){
  138. if(anterior->hIzq==actual){anterior->hIzq=actual->hIzq;}
  139. if(anterior->hDer==actual){anterior->hDer=actual->hIzq;}
  140. }
  141. if((actual->hIzq==NULL)&&(actual->hDer!=NULL)){
  142. if(anterior->hIzq==actual){anterior->hIzq=actual->hDer;}
  143. if(anterior->hDer==actual){anterior->hDer=actual->hDer;}
  144. }
  145.  
  146. if ((actual->hIzq!=NULL)&&(actual->hDer!=NULL)){
  147. aux2=actual;
  148. eliminarmenor(actual,aux3, x);
  149. aux2->estado.nombre=x;
  150. }
  151. }
  152. }
  153.  
  154.  
  155. eliminarmenor(nodoV *&apunt, nodoV *&aux3, string &x){
  156. nodoV *aux;
  157. if(apunt->hIzq==NULL){
  158. aux=apunt;if(apunt->hDer!=NULL){aux3=apunt->hDer;}else{aux3=apunt;}
  159. x=aux3->estado.nombre;
  160. if((apunt->hDer==NULL)&&(apunt->hIzq==NULL)){apunt=NULL;}else{
  161. apunt->hDer=NULL;
  162. apunt->hIzq=NULL;
  163. }
  164. }else{
  165. eliminarmenor(apunt->hIzq,aux3, x);
  166. }
  167. }
  168.  
  169.  
  170. };
  171. //recorridos
  172. preorden(nodoV *raiz){
  173. if(raiz!=NULL){
  174. cout<<raiz->estado.nombre<<" ->";
  175. preorden(raiz->hIzq);
  176. preorden(raiz->hDer);
  177. }
  178. }
  179. inorden(nodoV *raiz){
  180. if(raiz!=NULL){
  181. inorden(raiz->hIzq);
  182. cout<<raiz->estado.nombre<<" ->";
  183. inorden(raiz->hDer);
  184. }
  185. }
  186. postorden(nodoV *raiz){
  187. if(raiz!=NULL){
  188. postorden(raiz->hIzq);
  189. postorden(raiz->hDer);
  190. cout<<raiz->estado.nombre<<" ->";
  191. }
  192. }
  193.  
  194.  
  195. int main(){
  196. arbin ar;
  197. ar.creararbol();
  198. reg uno, dos, tres;
  199. uno.nombre="Caracas";
  200. dos.nombre="Anzoategui";
  201. tres.nombre="Zulia";
  202. ar.insertar(uno);
  203. ar.insertar(dos);
  204. ar.insertar(tres);
  205. cout<<endl;cout<<"pre: ";
  206. preorden(ar.Raiz);
  207. cout<<endl;cout<<"in: ";
  208. inorden(ar.Raiz);
  209. cout<<endl;cout<<"post: ";
  210. postorden(ar.Raiz);
  211. ar.eliminar("Anzoategui");
  212. cout<<endl;cout<<"pre: ";
  213. preorden(ar.Raiz);
  214. cout<<endl;cout<<"in: ";
  215. inorden(ar.Raiz);
  216. cout<<endl;cout<<"post: ";
  217. postorden(ar.Raiz);
  218. ar.eliminar("Zulia");
  219. cout<<endl;cout<<"pre: ";
  220. preorden(ar.Raiz);
  221. cout<<endl;cout<<"in: ";
  222. inorden(ar.Raiz);
  223. cout<<endl;cout<<"post: ";
  224. postorden(ar.Raiz);
  225.  
  226.  
  227.  
  228. }
Add Comment
Please, Sign In to add comment