C#: Árbol Binario Genérico
19/01/2009
1 Comentario
Este árbol binario lo desarrolle en un momento de aburrimiento en el trabajo y nunca lo temine, por eso me faltó implementar el método eliminar, asi que espero añadirlo en un futuro próximo.
Lo interesante de este código es que permite utilizar los tipos de datos char, string, datetime, int, decimal, o cual otro objeto que tenga implementado la interfaz Icomparable. Porque el árbol binario hace uso del método CompareTo de la interfaz Icomparable, para ir comparando el nuevo nodo con los nodos existentes y asi saber que camino debe tomar.
using System.Collections.Generic;
namespace ArbolBinarioGenerico
{
class Program
{
static void Main(string[] args)
{
ArbolBinario<int> arbol = new ArbolBinario<int>(8); //1
arbol.Insertar(ref arbol, 7); //2
arbol.Insertar(ref arbol, 5); //3
arbol.Insertar(ref arbol, 3); //4
arbol.Insertar(ref arbol, 4); //5
arbol.Insertar(ref arbol, 0); //6
arbol.Insertar(ref arbol, 2); //7
arbol.Insertar(ref arbol, 6); //8
arbol.Insertar(ref arbol, 9); //9
arbol.Insertar(ref arbol, 1); //10
foreach(int valor in arbol.Listar(arbol, new List<int<()))
Console.WriteLine(valor);
}
}
public class ArbolBinario<T> where T : IComparable
{
private T valor;
private ArbolBinario<T> nodoIzq = null; // nodo derecho
private ArbolBinario<T> nodoDer = null; // nodo izquierdo
public ArbolBinario(T valor) // constructor
{
this.valor = valor;
}
public void Insertar(ref ArbolBinario<T> nodo, T valor)
{
if (nodo == null)
nodo = new ArbolBinario<T>(valor);
else
{
if (nodo.valor.CompareTo(valor) > 0)
Insertar(ref nodo.nodoIzq, valor);
else
Insertar(ref nodo.nodoDer, valor);
}
}
public List<T> Listar(ArbolBinario<T> nodo, List<T> arbol)
{
if (nodo.nodoIzq != null)
Listar(nodo.nodoIzq, arbol);
arbol.Add(nodo.valor);
if (nodo.nodoDer != null)
Listar(nodo.nodoDer, arbol);
return arbol;
}
}
}
Categorías:Arbol Binario, C#, Generico, Icomparable, Programación