Sie sind auf Seite 1von 6

using System; using System.Collections.Generic; using System.

Text; namespace arbol { class Program { public class Nodo { public Nodo NodoIzquierdo; public int dato; public Nodo NodoDerecho; //Constructor public Nodo() { this.NodoIzquierdo = null; this.dato = 0; this.NodoDerecho = null; } } class Class1 { static void Main(string[] args) { Console.Clear(); int Opcion = 0; Nodo Raiz = null; int Dato; do { Opcion = Menu(); switch (Opcion) { case 1: Console.Write("\nIngrese dato: "); Dato = int.Parse(Console.ReadLine()); if (Raiz == null) { Nodo NuevoNodo = new Nodo(); NuevoNodo.dato = Dato; Raiz = NuevoNodo; } else { Insertar(Raiz, Dato); } Console.Clear(); break; //Recorrido en Pre Orden del Arbol case 2: RecorridoPreorden(Raiz); Console.WriteLine("Fin del Recorrido,..."); Console.ReadLine(); Console.Clear(); break; //Recorrido en Post Orden del Arbol case 3: RecorridoPostorden(Raiz); Console.WriteLine("Fin del Recorrido,..."); Console.ReadLine();

Console.Clear(); break; //Recorrido en In Orden del Arbol case 4: RecorridoInorden(Raiz); Console.WriteLine("Fin del Recorrido,..."); Console.ReadLine(); Console.Clear(); break; case 5: 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 6: 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 7: Finalizar(); break; } } while (Opcion != 7); } static int Menu() { Console.Clear(); int opcion = 0; do { Console.WriteLine("MENU DE ARBOLES"); Console.WriteLine(""); Console.WriteLine("1.- Ingresar Nuevo Nodo"); Console.WriteLine("2.- Recorrido en Pre-orden"); Console.WriteLine("3.- Recorrido en Post-orden"); Console.WriteLine("4.- Recorrido en In-orden"); Console.WriteLine("5.- Buscar un Nodo"); Console.WriteLine("6.- Eliminar un Nodo"); Console.WriteLine("7.- Finalizar el Programa"); Console.WriteLine(""); Console.Write("Ingrese Opcion: "); opcion = int.Parse(Console.ReadLine()); //Console.WriteLine(""); if (opcion < 1 opcion > 7) { Console.WriteLine("\nOpcion Invalida....");

} Console.Clear(); } while (opcion < 1 return opcion;

opcion > 7);

} //Insertar en un arbol binario static void Insertar(Nodo Raiz, int Dato) { if (Dato < Raiz.dato) { if (Raiz.NodoIzquierdo == null) { Nodo NuevoNodo = new Nodo(); NuevoNodo.dato = Dato; Raiz.NodoIzquierdo = NuevoNodo; } else { //Llamada recursiva Insertar(Raiz.NodoIzquierdo, Dato); } } else//Buscar por el lado derecho { if (Dato > Raiz.dato) { if (Raiz.NodoDerecho == null) { Nodo NuevoNodo = new Nodo(); NuevoNodo.dato = 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 en Pre-Orden static void RecorridoPreorden(Nodo Raiz) { if (Raiz != null) { Console.Write("{0}, ", Raiz.dato); RecorridoPreorden(Raiz.NodoIzquierdo); RecorridoPreorden(Raiz.NodoDerecho); } } //Metodo de recorrido en In-Orden static void RecorridoInorden(Nodo Raiz)

{ if (Raiz != null) { RecorridoInorden(Raiz.NodoIzquierdo); Console.Write("{0}, ", Raiz.dato); RecorridoInorden(Raiz.NodoDerecho); } } //Metodo de recorrido en Post-Orden static void RecorridoPostorden(Nodo Raiz) { if (Raiz != null) { RecorridoPostorden(Raiz.NodoIzquierdo); RecorridoPostorden(Raiz.NodoDerecho); Console.Write("{0}, ", Raiz.dato); } } //Metodo de Buscar un nodo static void BuscarNodo(Nodo Raiz, int Dato) { if (Dato < Raiz.dato) { //Buscar por el Sub-Arbol izquierdo if (Raiz.NodoIzquierdo == null) { Console.WriteLine("No se encuentra el Nodo..."); Console.ReadLine(); } else { BuscarNodo(Raiz.NodoIzquierdo, Dato); } } else { if (Dato > Raiz.dato) { //Buscar por el Sub-Arbol derecho if (Raiz.NodoDerecho == null) { Console.WriteLine("No se encuentra el Nodo..."); Console.ReadLine(); } else { BuscarNodo(Raiz.NodoDerecho, Dato); } } else { //El nodo se encontro Console.WriteLine("Nodo en el Arbol..."); Console.ReadLine(); } } } //Metodo de Eliminar static void EliminarNodo(ref Nodo Raiz, int Dato) {

if (Raiz != null) { if (Dato < Raiz.dato) { EliminarNodo(ref Raiz.NodoIzquierdo, Dato); } else { if (Dato > Raiz.dato) { EliminarNodo(ref Raiz.NodoDerecho, Dato); } else { //nodo Encontrado Nodo NodoEliminar = Raiz; if (NodoEliminar.NodoDerecho == null) { Raiz = NodoEliminar.NodoIzquierdo; } else { if (NodoEliminar.NodoIzquierdo == null) { Raiz = NodoEliminar.NodoDerecho; } else { Nodo AuxiliarNodo = null; Nodo Auxiliar = Raiz.NodoIzquierdo; bool Bandera = false; while (Auxiliar.NodoDerecho != null) { AuxiliarNodo = Auxiliar; Auxiliar = Auxiliar.NodoDerecho; Bandera = true; } Raiz.dato = Auxiliar.dato; NodoEliminar = Auxiliar; if (Bandera == true) { AuxiliarNodo.NodoDerecho = Auxiliar.Nodo Izquierdo; } else { Raiz.NodoIzquierdo = Auxiliar.NodoIzquie rdo; } } } } } } else { Console.WriteLine("Nodo no existe en el Arbol..."); Console.ReadLine(); } }

//Metodo de Finalizacion static void Finalizar() { Console.WriteLine("Fin del Programa..."); Console.ReadLine(); } } } }

Das könnte Ihnen auch gefallen