Documentos de Académico
Documentos de Profesional
Documentos de Cultura
TareaArbol Binario de Busqueda
TareaArbol Binario de Busqueda
ALGORITMO BUSQUEDA:
1. Verificar que el árbol no este vacío.
Se devuelve el valor NULO(null)
2. Se debe comparar la clave buscar con el campo información(clave) del nodo
Si es igual se vuelve el nodo encontrado.
Si es mayor, debe avanzarse hacia el subárbol derecho y continuar la búsqueda
devolviendo la ligar o rama derecha y regresa al paso 1.
3. Si es menor, debe avanzarse hacia el subárbol izquierdo y continuar la
búsqueda devolviendo la liga o rama izquierda y regresar al paso 1.
ALGORITMO ELIMINACION:
1. Buscar el elemento.
2. Se el elemento a eliminar es terminal una hoja, se suprime redifiniendo el
puntero del predecesor.
3. Si el elemento a eliminar tiene un solo descendiente, entonces tiene que
sustituirse por ese descendiente.
4. Si el elemento a eliminar tiene los dos descendientes, entonces se tiene que
sustituir por el nodo que se encuentra mas a la izquierda en el subárbol
derecho o por el nodo que se encuentra mas a la derecha en el subárbol
izquierdo.
using System;
using System.Collections.Generic;
using System.Linq;
using System.Net.NetworkInformation;
using System.Reflection.Emit;
using System.Security.Cryptography.X509Certificates;
using System.Text;
using System.Threading.Tasks;
namespace TareaABB
{
public class ABB
{
int dato;
public bool Grado1 = false, Grado2 = false;
public ABB()
{
nodoRaiz = null;
}
dato = Convert.ToInt32(Console.ReadLine());
NuevoNodo.Dato = dato;
if(nodoRaiz == null)
{
nodoRaiz = NuevoNodo;
}
else if(BuscarDato(dato)!= null)
{
Console.WriteLine("El nodo ingresado: \n" + dato + ": ya se registro
en el Arbol");
}
else
{
NodoArbol NodoAnterior = null;
NodoArbol NodoRecorrido = nodoRaiz;
while(NodoRecorrido != null)
{
NodoAnterior = NodoRecorrido;
if(dato < NodoRecorrido.Dato)
{
NodoRecorrido = NodoRecorrido.RamaIzquierda;
}
else
{
NodoRecorrido = NodoRecorrido.RamaDerecha;
}
}
Console.Write(NodoRecorrido.Dato + "\n");
ImprimirInOrden(NodoRecorrido.RamaDerecha);
}
}
public void ImprimirInOrden()
{
ImprimirInOrden(nodoRaiz);
Console.WriteLine();
}
}
}
else
{
if(BuscarDato(dato)== null)
{
Console.WriteLine("El valor buscao " + dato + " no se
encuentra en el arbol");
}
else
{
Console.Write("El valor buscado" + ": " +dato +"\n");
}
}
}
}
else
{
Console.WriteLine("Ingrese el valor que dese eliminar");
dato = Convert.ToInt32(Console.ReadLine());
while(NodoRecorrido.Dato != dato)
{
NodoPadre = NodoRecorrido;
}
else if(HijoIzquierdo)
{
NodoPadre.RamaIzquierda = NodoRecorrido.RamaIzquierda;
}
else
{
NodoPadre.RamaDerecha = NodoRecorrido.RamaIzquierda;
}
}
else if( NodoRecorrido.RamaIzquierda == null)
{
if(NodoRecorrido == nodoRaiz)
{
nodoRaiz = NodoRecorrido.RamaDerecha;
}
else if (HijoIzquierdo)
{
NodoPadre.RamaIzquierda = NodoRecorrido.RamaDerecha;
}
else
{
NodoPadre.RamaDerecha = NodoRecorrido.RamaIzquierda;
}
}
else
{
NodoArbol NodoReemplazo = ObtenerNodoReemplazo(NodoRecorrido);
if(NodoRecorrido == nodoRaiz)
{
nodoRaiz = NodoReemplazo;
}
else if (HijoIzquierdo)
{
NodoPadre.RamaIzquierda = NodoReemplazo;
}
else
{
NodoPadre.RamaDerecha = NodoReemplazo;
}
NodoReemplazo.RamaIzquierda = NodoRecorrido.RamaIzquierda;
}
}
return true;
}
public NodoArbol ObtenerNodoReemplazo(NodoArbol NodoReem)
{
NodoArbol NodoReemplazoPadre = NodoReem;
NodoArbol NodoReemplazo = NodoReem;
NodoArbol NodoRecorrido = NodoReem.RamaDerecha;
while(NodoRecorrido != null)
{
NodoReemplazoPadre = NodoReemplazo;
NodoReemplazo = NodoRecorrido;
NodoRecorrido = NodoRecorrido.RamaIzquierda;
}
if(NodoReemplazo != NodoReem.RamaDerecha)
{
NodoReemplazoPadre.RamaIzquierda = NodoReemplazo.RamaDerecha;
NodoReemplazo.RamaDerecha = NodoReem.RamaDerecha;
}
Console.WriteLine("El nodo remplazo dl nodo eliminado es " +
NodoReemplazo.Dato );
return NodoReemplazo;
}
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace TareaABB
{
public class NodoArbol
{
RamaIzquierda = null;
this.Dato = dato;
RamaDerecha = null;
}
}
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace TareaABB
{
class Program
{
static void Main(string[] args)
{
try
{
ABB ArbolBB = new ABB();
byte Opcion = 0;
do
{
Console.WriteLine("Menu principal");
Console.WriteLine("..........................");
Console.WriteLine("1. Insertar nodo en el arbol");
case 2:
Console.WriteLine("Inserta el nodo que buscas");
ArbolBB.BusquedaDato();
break;
case 3:
Console.Clear();
Console.WriteLine("\nELIMINAR NODO EN EL ARBOL...");
ArbolBB.EliminarDato();
Console.Clear();
Console.WriteLine("Borraste un nodo del arbol...");
Console.ReadKey();
break;
case 4:
Console.Clear();
Console.WriteLine("Raiz.");
ArbolBB.EsRaiz();
Console.WriteLine("Imprir albol inOrde.");
ArbolBB.ImprimirInOrden();
Console.ReadKey();
break;
case 5:
Console.Clear();
Console.ReadKey();
break;
default:
Console.Clear();
Console.ReadKey();
break;
}
}
while (Opcion != 5);
}
catch (FormatException e)
{
Console.WriteLine("******************************");
Console.WriteLine("ERROR" + e.Message);
Console.WriteLine("******************************");
}
}
}
}