You are on page 1of 4

// avl.cpp: archivo de proyecto principal. #include "stdafx.h" #include <iostream> using System; using System.Collections.Generic; using System.

Text; namespace arboles { public class NodoT { public NodoT NodoIzquierdo; public int Informacion; public NodoT NodoDerecho; //Constructor public NodoT( ) { this.NodoIzquierdo = null; this.Informacion = 0; this.NodoDerecho = null; } } class Program { static void Main(string[ ] args) { int Opcion = 0; NodoT Raiz = null; int Dato; do { Opcion = Menu( ); switch (Opcion) { case 1: Console.Write("Valor del Nuevo Nodo: "); Dato = int.Parse(Console.ReadLine( )); if (Raiz == null) { NodoT NuevoNodo = new NodoT( ); NuevoNodo.Informacion = Dato; Raiz = NuevoNodo; } else { Insertar(Raiz, Dato); } Console.Clear( ); break; case 2: Recorrer(Raiz); Console.WriteLine("Fin del Recorrido,..."); Console.ReadLine( ); Console.Clear( ); break; case 3: Console.Write("Teclee el Dato a Buscar: "); Dato = int.Parse(Console.ReadLine( )); if (Raiz != null) { BuscarNodo(Raiz, Dato); } else { Console.WriteLine("ERROR, Arbol Vacio...."); } Console.Clear( ); break; case 4: Console.Write("Teclee el Dato a Eliminar: "); Dato = int.Parse(Console.ReadLine( ));

if (Raiz != null) { EliminarNodo(ref Raiz, Dato); } else { Console.WriteLine("ERROR, Arbol Vacio...."); } Console.Clear( ); break; case 5: Finalizar( ); break; default: Console.WriteLine("ERROR, Opcion Invalida...."); Console.ReadLine( ); Console.WriteLine(""); break; } } while (Opcion != 5); } static int Menu( ) { int Resultado = 0; Console.WriteLine("MENU DE ARBOLES"); Console.WriteLine(""); Console.WriteLine("1.- Registrar un Nuevo Nodo"); Console.WriteLine("2.- Mostrar/Recorrer el Arbol"); Console.WriteLine("3.- Buscar un Nodo"); Console.WriteLine("4.- Eliminar un Nodo"); Console.WriteLine("5.- Finalizar el Programa"); Console.WriteLine(""); Console.Write("Opcion: "); Resultado = int.Parse(Console.ReadLine()); Console.WriteLine(""); return Resultado; } //Insertar en un arbol binario static void Insertar(NodoT Raiz, int Dato) { if (Dato < Raiz.Informacion) { if (Raiz.NodoIzquierdo == null) { NodoT NuevoNodo = new NodoT( ); NuevoNodo.Informacion = Dato; Raiz.NodoIzquierdo = NuevoNodo; } else { Insertar(Raiz.NodoIzquierdo, Dato); //Llamada recursiva } } else { //Buscar por el lado derecho if (Dato > Raiz.Informacion) { if (Raiz.NodoDerecho == null) { NodoT NuevoNodo = new NodoT( ); NuevoNodo.Informacion = Dato; Raiz.NodoDerecho = NuevoNodo; } else { //Llamada recursiva por el lado derecho Insertar(Raiz.NodoDerecho, Dato); } }

else { //El Nodo existe en el Arbol Console.WriteLine("Nodo Existente, Imposible Insertar..."); Console.ReadLine( ); } } } //Metodo de recorrido static void BuscarNodo(NodoT Raiz, int Dato) { if (Dato < Raiz.Informacion) { if (Raiz.NodoIzquierdo == null) //Buscar por el Sub-Arbol izquierdo { Console.WriteLine("ERROR, No se encuentra el Nodo..."); Console.ReadLine( ); } else { BuscarNodo(Raiz.NodoIzquierdo, Dato); } } else { if (Dato > Raiz.Informacion) { if (Raiz.NodoDerecho == null) //Buscar por el Sub-Arbol derecho { Console.WriteLine("ERROR, No se encuentra el Nodo..."); Console.ReadLine( ); } else { BuscarNodo(Raiz.NodoDerecho, Dato); } } else { //El nodo se encontro Console.WriteLine("Nodo Localizado en el Arbol..."); Console.ReadLine( ); } } } //Metodo de Eliminar static void EliminarNodo(ref NodoT Raiz, int Dato) { if (Raiz != null) { if (Dato < Raiz.Informacion) { EliminarNodo(ref Raiz.NodoIzquierdo, Dato); } else { if (Dato > Raiz.Informacion) { EliminarNodo(ref Raiz.NodoDerecho, Dato); } else { NodoT NodoEliminar = Raiz; //Si lo Encontro if (NodoEliminar.NodoDerecho == null) { Raiz = NodoEliminar.NodoIzquierdo; } else { if (NodoEliminar.NodoIzquierdo == null) { Raiz = NodoEliminar.NodoDerecho; } else { NodoT AuxiliarNodo = null; NodoT Auxiliar = Raiz.NodoIzquierdo; bool Bandera = false; while (Auxiliar.NodoDerecho != null)

{ AuxiliarNodo = Auxiliar; Auxiliar = Auxiliar.NodoDerecho; Bandera = true; } Raiz.Informacion = Auxiliar.Informacion; NodoEliminar = Auxiliar; if (Bandera == true) { AuxiliarNodo.NodoDerecho = Auxiliar.NodoIzquierdo; } else { Raiz.NodoIzquierdo = Auxiliar.NodoIzquierdo; } } } } } } else { Console.WriteLine("ERROR, EL Nodo no se Encuentra en el Arbol..."); Console.ReadLine( ); } } //Metodo de Finalizacion static void Finalizar( ) { Console.WriteLine("Fin del Programa, press any key to continue,..."); Console.ReadLine( ); } } // Fin de Program } // Fin del namespace

You might also like