Anda di halaman 1dari 8

1. public class NodoT 2. { 3. public NodoT NodoIzquierdo; 4. public int Informacion; 5. public NodoT NodoDerecho; 6. //Constructor 7.

public NodoT() 8. { 9. this.NodoIzquierdo=null; 10. this.Informacion=0; 11. this.NodoDerecho=null; 12. } 13. } 14. /// <summary> 15. /// Summary description for Class1. 16. /// </summary> 17. class Class1 18. { 19. /// <summary> 20. /// The main entry point for the application. 21. /// </summary> 22. [STAThread] 23. static void Main(string[] args) 24. { 25. ClearConsole ClearMyConsole = new ClearConsole(); 26. int Opcion=0; 27. NodoT Raiz=null; 28. int Dato; 29. do 30. { 31. Opcion=Menu(); 32. switch(Opcion) 33. { 34. case 1: Console.Write("Valor del Nuevo Nodo: "); 35. Dato=int.Parse(Console.ReadLine()); 36. if(Raiz==null) 37. { 38. NodoT NuevoNodo=new NodoT(); 39. NuevoNodo.Informacion=Dato; 40. Raiz=NuevoNodo;

41. } 42. else 43. { 44. Insertar(Raiz, Dato); 45. } 46. ClearMyConsole.Clear(); 47. break; 48. //Recorrido en Pre Orden del Arbol 49. case 2: RecorridoPreorden(Raiz); 50. Console.WriteLine("Fin del Recorrido,..."); 51. Console.ReadLine(); 52. ClearMyConsole.Clear(); 53. break; 54. //Recorrido en Post Orden del Arbol 55. case 3: RecorridoPostorden(Raiz); 56. Console.WriteLine("Fin del Recorrido,..."); 57. Console.ReadLine(); 58. ClearMyConsole.Clear(); 59. break; 60. //Recorrido en In Orden del Arbol 61. case 4: RecorridoInorden(Raiz); 62. Console.WriteLine("Fin del Recorrido,..."); 63. Console.ReadLine(); 64. ClearMyConsole.Clear(); 65. break; 66. case 5: Console.Write("Teclee el Dato a Buscar: "); 67. Dato=int.Parse(Console.ReadLine()); 68. if(Raiz!=null) 69. { 70. BuscarNodo(Raiz, Dato); 71. } 72. else 73. { 74. Console.WriteLine("ERROR, Arbol Vacio...."); 75. } 76. ClearMyConsole.Clear();

77. break; 78. case 6: Console.Write("Teclee el Dato a Eliminar: "); 79. Dato=int.Parse(Console.ReadLine()); 80. if(Raiz!=null) 81. { 82. EliminarNodo(ref Raiz, Dato); 83. } 84. else 85. { 86. Console.WriteLine("ERROR, Arbol Vacio...."); 87. } 88. ClearMyConsole.Clear(); 89. break; 90. case 7: Finalizar(); 91. break; 92. } 93. }while(Opcion!=7); 94. 95. } 96. static int Menu() 97. { 98. ClearConsole ClearMyConsole = new ClearConsole(); 99. int Resultado=0; 100. do 101. { 102. Console.WriteLine("MENU DE ARBOLES"); 103. Console.WriteLine(""); 104. Console.WriteLine("1.- Registrar un Nuevo Nodo"); 105. Console.WriteLine("2.- Recorrido en Preorden"); 106. Console.WriteLine("3.- Recorrido en Post-orden"); 107. Console.WriteLine("4.- Recorrido en Inorden"); 108. Console.WriteLine("5.- Buscar un Nodo"); 109. Console.WriteLine("6.- Eliminar un Nodo"); 110. Console.WriteLine("7.- Finalizar el Programa");

111. Console.WriteLine(""); 112. Console.Write("Teclee la Opcion Deseada: "); 113. Resultado=int.Parse(Console.ReadLine()); 114. Console.WriteLine(""); 115. if(Resultado<1||Resultado>7) 116. { 117. Console.WriteLine("ERROR, Opcion Invalida...."); 118. Console.ReadLine(); 119. Console.WriteLine(""); 120. } 121. ClearMyConsole.Clear(); 122. }while(Resultado<1||Resultado>7); 123. return Resultado; 124. } 125. //Insertar en un arbol binario 126. static void Insertar(NodoT Raiz, int Dato) 127. { 128. if(Dato<Raiz.Informacion) 129. { 130. if(Raiz.NodoIzquierdo==null) 131. { 132. NodoT NuevoNodo=new NodoT(); 133. NuevoNodo.Informacion=Dato; 134. Raiz.NodoIzquierdo=NuevoNodo; 135. } 136. else 137. { 138. //Llamada recursiva 139. Insertar(Raiz.NodoIzquierdo, Dato); 140. } 141. } 142. else//Buscar por el lado derecho 143. { 144. if(Dato>Raiz.Informacion) 145. { 146. if(Raiz.NodoDerecho==null) 147. { 148. NodoT NuevoNodo=new NodoT(); 149. NuevoNodo.Informacion=Dato; 150. Raiz.NodoDerecho=NuevoNodo; 151. } 152. else 153. {

154. //Llamada recursiva por el lado derecho 155. Insertar(Raiz.NodoDerecho, Dato); 156. } 157. } 158. else 159. { 160. //El Nodo existe en el Arbol 161. Console.WriteLine("Nodo Existente, Imposible Insertar..."); 162. Console.ReadLine(); 163. } 164. } 165. } 166. //Metodo de recorrido en Pre-Orden 167. static void RecorridoPreorden(NodoT Raiz) 168. { 169. if(Raiz!=null) 170. { 171. Console.Write("{0}, ",Raiz.Informacion); 172. RecorridoPreorden(Raiz.NodoIzquierdo); 173. RecorridoPreorden(Raiz.NodoDerecho); 174. } 175. } 176. //Metodo de recorrido en In-Orden 177. static void RecorridoInorden(NodoT Raiz) 178. { 179. if(Raiz!=null) 180. { 181. RecorridoInorden(Raiz.NodoIzquierdo); 182. Console.Write("{0}, ",Raiz.Informacion); 183. RecorridoInorden(Raiz.NodoDerecho); 184. } 185. } 186. //Metodo de recorrido en Post-Orden 187. static void RecorridoPostorden(NodoT Raiz) 188. { 189. if(Raiz!=null) 190. { 191. RecorridoPostorden(Raiz.NodoIzquierdo); 192. RecorridoPostorden(Raiz.NodoDerecho);

193. Console.Write("{0}, ",Raiz.Informacion); 194. } 195. } 196. //Metodo de Buscar un nodo 197. static void BuscarNodo(NodoT Raiz, int Dato) 198. { 199. if(Dato<Raiz.Informacion) 200. { 201. //Buscar por el Sub-Arbol izquierdo 202. if(Raiz.NodoIzquierdo==null) 203. { 204. Console.WriteLine("ERROR, No se encuentra el Nodo..."); 205. Console.ReadLine(); 206. } 207. else 208. { 209. BuscarNodo(Raiz.NodoIzquierdo, Dato); 210. } 211. } 212. else 213. { 214. if(Dato>Raiz.Informacion) 215. { 216. //Buscar por el Sub-Arbol derecho 217. if(Raiz.NodoDerecho==null) 218. { 219. Console.WriteLine("ERROR, No se encuentra el Nodo..."); 220. Console.ReadLine(); 221. } 222. else 223. { 224. BuscarNodo(Raiz.NodoDerecho, Dato); 225. } 226. } 227. else 228. { 229. //El nodo se encontro 230. Console.WriteLine("Nodo Localizado en el Arbol..."); 231. Console.ReadLine(); 232. }

233. } 234. } 235. //Metodo de Eliminar 236. static void EliminarNodo(ref NodoT Raiz, int Dato) 237. { 238. if(Raiz!=null) 239. { 240. if(Dato<Raiz.Informacion) 241. { 242. EliminarNodo(ref Raiz.NodoIzquierdo, Dato); 243. } 244. else 245. { 246. if(Dato>Raiz.Informacion) 247. { 248. EliminarNodo(ref Raiz.NodoDerecho, Dato); 249. } 250. else 251. { 252. //Si lo Encontro 253. NodoT NodoEliminar=Raiz; 254. if(NodoEliminar.NodoDerecho==null) 255. { 256. Raiz=NodoEliminar.NodoIzquierdo; 257. } 258. else 259. { 260. if(NodoEliminar.NodoIzquierdo==null) 261. { 262. Raiz=NodoEliminar.NodoDerecho; 263. } 264. else 265. { 266. NodoT AuxiliarNodo=null; 267. NodoT Auxiliar=Raiz.NodoIzquierdo; 268. bool Bandera=false;

269. while(Auxiliar.NodoDerecho!=null) 270. { 271. AuxiliarNodo=Auxiliar; 272. Auxiliar=Auxiliar.NodoDerecho; 273. Bandera=true; 274. } 275. Raiz.Informacion=Auxiliar.Informacion; 276. NodoEliminar=Auxiliar; 277. if(Bandera==true) 278. { 279. AuxiliarNodo.NodoDerecho=Auxiliar.NodoIzquierdo; 280. } 281. else 282. { 283. Raiz.NodoIzquierdo=Auxiliar.NodoIzquierdo; 284. } 285. } 286. } 287. } 288. } 289. } 290. else 291. { 292. Console.WriteLine("ERROR, EL Nodo no se Encuentra en el Arbol..."); 293. Console.ReadLine(); 294. } 295. } 296. //Metodo de Finalizacion 297. static void Finalizar() 298. { 299. Console.WriteLine("Fin del Programa, press any key to continue,..."); 300. Console.ReadLine(); 301. } 302. } 303.

Anda mungkin juga menyukai