RE:arboles binarios
Publicado por
Dante Jara (1 intervención) el 26/01/2007 23:05:06
using System;
using System.Collections.Generic;
using System.Text;
namespace ArbolBB
{
public class CArbolBB
{
private CArbolBB aSubArbolIzq;
private object aRaiz;
private CArbolBB aSubArbolDer;
public CArbolBB()
{
aSubArbolIzq = null;
aRaiz = null;
aSubArbolDer = null;
}
public CArbolBB(CArbolBB pSubArbolIzq, object pRaiz, CArbolBB pSubArbolDer)
{
aSubArbolIzq = pSubArbolIzq;
aRaiz = pRaiz;
aSubArbolDer = pSubArbolDer;
}
public static CArbolBB Crear()
{
return new CArbolBB();
}
public static CArbolBB Crear(CArbolBB pSubArbolIzq, object pRaiz, CArbolBB pSubArbolDer, CArbolBB pPadre)
{
return new CArbolBB(pSubArbolIzq, pRaiz, pSubArbolDer);
}
public CArbolBB SubArbolIzq
{
get
{
return aSubArbolIzq;
}
set
{
aSubArbolIzq = value;
}
}
public object Raiz
{
get
{
return aRaiz;
}
set
{
aRaiz = value;
}
}
public CArbolBB SubArbolDer
{
get
{
return aSubArbolDer;
}
set
{
aSubArbolDer = value;
}
}
public bool EstaVAcio()
{
return (aRaiz == null);
}
public void Agregar(object Elemento)
{
if (aRaiz == null)
{
aRaiz = Elemento;
}
else
{
if (Elemento.ToString().CompareTo(aRaiz.ToString()) < 0)
{
if (aSubArbolIzq == null)
{
aSubArbolIzq = new CArbolBB(null, Elemento, null);
}
else
{
aSubArbolIzq.Agregar(Elemento);
}
}
else
{
if (aSubArbolDer == null)
{
aSubArbolDer = new CArbolBB(null, Elemento, null);
}
else
{
aSubArbolDer.Agregar(Elemento);
}
}
}
}
public void Eliminar(object pRaiz)
{
}
public CArbolBB SubArbol(object pRaiz)
{
if (EstaVAcio())
{
return null;
}
else
{
if (aRaiz.Equals(pRaiz))
{
return this;
}
else
{
if (pRaiz.ToString().CompareTo(aRaiz.ToString()) < 0)
{
return aSubArbolIzq != null ? aSubArbolIzq.SubArbol(pRaiz) : null;
}
else
{
return aSubArbolDer != null ? aSubArbolDer.SubArbol(pRaiz) : null;
}
}
}
}
public CArbolBB Padre(object pRaiz)
{
if (EstaVAcio())
return null;
else
if (EsHijo(pRaiz))
return this;
else
if (pRaiz.ToString().CompareTo(aRaiz.ToString()) < 0)
return aSubArbolIzq != null ? aSubArbolIzq.Padre(pRaiz) : null;
else
return aSubArbolDer != null ? aSubArbolDer.Padre(pRaiz) : null;
}
public bool EsHijo(Object pRaiz)
{
return((((aSubArbolIzq!=null)&&(aSubArbolIzq.Raiz.Equals(pRaiz)))||((aSubArbolDer!=null)&&(aSubArbolDer.Raiz.Equals(pRaiz)))));
}
public object Minimo()
{
if (EstaVAcio())
return null;
else
return SubArbolIzq == null ? aRaiz : aSubArbolIzq.Minimo();
}
public object Maximo()
{
if (EstaVAcio())
return null;
else
return SubArbolIzq == null ? aRaiz : aSubArbolIzq.Maximo();
}
public int Altura()
{
if (EstaVAcio())
return 0;
else
{
int AlturaIzq = (aSubArbolIzq == null ? 0 : 1 + aSubArbolIzq.Altura());
int AlturaDer = (aSubArbolDer == null ? 0 : 1 + aSubArbolDer.Altura());
return (AlturaIzq > AlturaDer ? AlturaIzq : AlturaDer);
}
}
public void PreOrden()
{
if (aRaiz != null)
{
Console.WriteLine(aRaiz.ToString());
if (aSubArbolIzq != null)
aSubArbolIzq.PreOrden();
if (aSubArbolDer != null)
aSubArbolDer.PreOrden();
}
}
public void InOrden()
{
if (aRaiz != null)
{
if (aSubArbolIzq != null)
aSubArbolIzq.InOrden();
Console.WriteLine(aRaiz.ToString());
if (aSubArbolDer != null)
aSubArbolDer.InOrden();
}
}
public void PostOrden()
{
if (aRaiz != null)
{
if (aSubArbolIzq != null)
aSubArbolIzq.PostOrden();
if (aSubArbolDer != null)
aSubArbolDer.PostOrden();
Console.WriteLine(aRaiz.ToString());
}
}
}
}