You are on page 1of 13

using using using using

System; System.Collections.Generic; System.Text; System.Windows.Forms;

namespace ARBOLES { class Arbol { private Nodo raiz; public Arbol() { raiz = null; } private bool EsHoja(Nodo pr) { return (pr.HijoIzq() == null && pr.HijoDer() == null); } public void Insertar(int x) { if (!Existe(x)) { Nodo q = new Nodo(x); if (raiz == null) { raiz = q; return; } Nodo p = raiz; Nodo ap = null; while (p != null) { ap = p; if (x < p.GetElem()) p = p.HijoIzq(); else p = p.HijoDer(); } if (x < ap.GetElem()) ap.HijoIzq(q); else ap.HijoDer(q); } } #region "ordenes" public void PreOrden(RichTextBox rtb) { PreOrden(raiz, rtb); } private void PreOrden(Nodo pr, RichTextBox rtb) { if (pr != null) { rtb.AppendText(pr.GetElem().ToString() + " "); PreOrden(pr.HijoIzq(), rtb); PreOrden(pr.HijoDer(), rtb); } } public void InOrden(RichTextBox rtb) {

InOrden(raiz, rtb); } private void InOrden(Nodo pr, RichTextBox rtb) { if (pr != null) { InOrden(pr.HijoIzq(), rtb); rtb.AppendText(pr.GetElem().ToString() + " "); InOrden(pr.HijoDer(), rtb); } } public void PostOrden(RichTextBox rtb) { PostOrden(raiz, rtb); } private void PostOrden(Nodo pr, RichTextBox rtb) { if (pr != null) { PostOrden(pr.HijoIzq(), rtb); PostOrden(pr.HijoDer(), rtb); rtb.AppendText(pr.GetElem().ToString() + " "); } } private void mostrar(Nodo pr,RichTextBox rtb) { if (pr != null) { PostOrdenPar(pr.HijoIzq(), rtb); PostOrdenPar(pr.HijoDer(), rtb); } } private void mostrar1(Nodo pr, RichTextBox rtb) { if (pr != null) { hojas(pr.HijoIzq(), rtb); hojas(pr.HijoDer(), rtb); } } private void PostOrdenPar(Nodo pr, RichTextBox rtb) { if (pr != null) { PostOrdenPar(pr.HijoIzq(), rtb); PostOrdenPar(pr.HijoDer(), rtb); if(pr.GetElem()%2==0) rtb.AppendText(pr.GetElem().ToString() + " "); } } private void hojas(Nodo pr, RichTextBox rtb) { if (pr != null) { hojas(pr.HijoIzq(), rtb); hojas(pr.HijoDer(), rtb); if (EsHoja(pr)) { rtb.AppendText(pr.GetElem().ToString() + " "); }

} } #endregion public int Suma() { return Suma(raiz); } private int Suma(Nodo pr) { if (pr == null) { return 0; } if (EsHoja(pr)) { return pr.GetElem() ; } return Suma(pr.HijoIzq()) + Suma(pr.HijoDer()) + pr.GetElem(); } public int CantidadHojas() { return CantidadHojas(raiz); } private int CantidadHojas(Nodo pr) { if (pr == null) return 0; else { if (EsHoja(pr)) return 1; else { int ai = CantidadHojas(pr.HijoIzq()); int ad = CantidadHojas(pr.HijoDer()); return ai + ad; } } } public int Cantidad() { return Cantidad(raiz); } private int Cantidad(Nodo pr) { if (pr == null) return 0; else { if (EsHoja(pr)) return 1; else { int ai = Cantidad(pr.HijoIzq()); int ad = Cantidad(pr.HijoDer()); return ai + ad + 1; } } } public int Altura()

{ return Altura(raiz); } private int Altura(Nodo pr) { if (pr == null) return 0; else { if (EsHoja(pr)) return 1; else { int ai = Altura(pr.HijoIzq()); int ad = Altura(pr.HijoDer()); if (ai > ad) return ai + 1; else return ad + 1; } } } public int SumarPares() { return SumarPares(raiz); } private int SumarPares(Nodo pr) { if (pr == null) return 0; else { if (EsHoja(pr)) { if (pr.GetElem() % 2 == 0) return pr.GetElem(); else return 0; } else { int ai = SumarPares(pr.HijoIzq()); int ad = SumarPares(pr.HijoDer()); if (pr.GetElem() % 2 == 0) return ai + ad + pr.GetElem(); else return ai + ad; } } } public int Mayor() { return Mayor(raiz); } private int Mayor(Nodo pr) { if (pr == null) return 0; else {

if (EsHoja(pr)) return pr.GetElem(); else return Mayor(pr.HijoDer()); } } public bool Existe(int x) { return Existe(x, raiz); } private bool Existe(int x, Nodo pr) { if (pr == null) return false; else { if (EsHoja(pr)) return (pr.GetElem() == x); else { if (pr.GetElem() == x) return true; else { if (x > pr.GetElem()) return Existe(x, pr.HijoDer()); else return Existe(x, pr.HijoIzq()); } } } } public void Descendientes(int x,RichTextBox rtb) { Descendientes(raiz, x,rtb); } private void Descendientes(Nodo pr, int x,RichTextBox rtb) { if (EsHoja(pr)) { if (pr.GetElem() == x) MessageBox.Show("El elemento Existe pero no tiene Descendien tes"); else MessageBox.Show("No Existe el Elemento"); } else { if (pr.GetElem() == x) InOrden(pr, rtb); else { if (x > pr.GetElem()) Descendientes(pr.HijoDer(), x, rtb); else Descendientes(pr.HijoIzq(), x, rtb); } } } public void DescenPares(int x,RichTextBox rtb)

{ DescenPares(raiz, x, rtb); } private void DescenPares(Nodo pr, int x, RichTextBox rtb) { if (EsHoja(pr)) { if (pr.GetElem() == x) MessageBox.Show("El elemento Existe pero no tiene Descendien tes"); else MessageBox.Show("No Existe el Elemento"); } else { if (pr.GetElem() == x) mostrar(pr, rtb); else { if (x > pr.GetElem()) DescenPares(pr.HijoDer(), x, rtb); else DescenPares(pr.HijoIzq(), x, rtb); } } } public void mostrarhojas(int x, RichTextBox rtb) { mostrarhojas(raiz, x, rtb); } private void mostrarhojas(Nodo pr, int x, RichTextBox rtb) { if (EsHoja(pr)) { if (pr.GetElem() == x) MessageBox.Show("Su descendientes no tine hojas"); else MessageBox.Show("No existe el nodo"); } else { if (pr.GetElem() == x) mostrar1(pr, rtb); else { if (x > pr.GetElem()) mostrarhojas(pr.HijoDer(), x, rtb); else mostrarhojas(pr.HijoIzq(), x, rtb); } } } private int cantHijos(Nodo pr) { if (pr == null) return 0; if (EsHoja(pr)) return 1; else {

int ai = cantHijos(pr.HijoIzq()); int ad = cantHijos(pr.HijoDer()); return ai + ad; } } public int cantHijos() { return cantHijos(raiz); } private int altura(Nodo pr, int x, int niv) { if (pr == null) return 0; if (pr.GetElem() == x) return niv; int ad = altura(pr.HijoDer(), x, niv + 1); int ai = altura(pr.HijoIzq(), x, niv + 1); niv = 1; if (ad != 0) return ad; else if (ai != 0) return ai; else return 0; } public int altura(int x) { return altura(raiz, x, 1); } public bool esPrimo(int x) { for (int i = 2; i < x; i++) if (x % i == 0) return true; return false; } public bool Padre(Nodo pr) { return pr.HijoDer() != null && pr.HijoIzq() != null; } private bool Hermanos(Nodo pr, int x, int y) { if (pr == null) return false; if (Padre(pr) && pr.HijoIzq().GetElem() == x && pr.HijoDer().GetElem () == y) return true; if (Hermanos(pr.HijoDer(), x, y) || Hermanos(pr.HijoIzq(), x, y)) return true; else return false; } public bool Hermanos(int x, int y) { return Hermanos(raiz, x, y); }

private void MostrarNivel(Nodo pr, int n, int c, RichTextBox rtb) { if (pr == null) return; if (n == c) { rtb.AppendText(pr.GetElem() + ","); return; } else { MostrarNivel(pr.HijoIzq(), n, c + 1, rtb); MostrarNivel(pr.HijoDer(), n, c + 1, rtb); c = 1; } } public void MostrarNivel(int c, RichTextBox rtb) { MostrarNivel(raiz, c, 1, rtb); } private bool TieneNietos(int abu, Nodo pr) { if (pr == null) return false; if (pr.GetElem() == abu && Altura(pr) >= 3) return true; if (TieneNietos(abu, pr.HijoDer()) || TieneNietos(abu, pr.HijoIzq()) ) return true; else return false; } public bool TieneNietos(int abu) { return TieneNietos(abu, raiz); } private int contarPrimos(Nodo pr) { if (pr == null) return 0; if (EsHoja(pr) && esPrimo(pr.GetElem())) return 1; else { int ai = contarPrimos(pr.HijoDer()); int ad = contarPrimos(pr.HijoIzq()); if (esPrimo(pr.GetElem())) return ai + ad + 1; else return ai + ad; } } public int contarPrimos() { return contarPrimos(raiz); } private int cantPadres(Nodo pr) { if (pr == null)

return 0; if (!EsHoja(pr)) return cantPadres(pr.HijoIzq()) + cantPadres(pr.HijoDer()) + 1; else return 0; } public int cantPadres() { return cantPadres(raiz); } public bool primos(int x, int y) { return primos(raiz, x, y); } private bool primos(Nodo pr, int x, int y) { if (Altura(pr) >= 3) {//ladoD = 2 "y esta en D" ladoD = 1 "x esta en D" int ladoI = 0; if (pr.HijoIzq() != null && pr.HijoIzq().HijoDer() != null && pr .HijoIzq().HijoDer().GetElem() == y) ladoI = 2; if (pr.HijoIzq() != null && pr.HijoIzq().HijoIzq() != null && pr .HijoIzq().HijoIzq().GetElem() == y) ladoI = 2; //.............................................................. ................................... if (pr.HijoIzq() != null && pr.HijoIzq().HijoDer() != null && pr .HijoIzq().HijoDer().GetElem() == x) ladoI = 1; if (pr.HijoIzq() != null && pr.HijoIzq().HijoIzq() != null && pr .HijoIzq().HijoIzq().GetElem() == x) ladoI = 1; if (ladoI == 1) { if (pr.HijoDer() != null && pr.HijoDer().HijoDer() != null & & pr.HijoDer().HijoDer().GetElem() == y) return true; if (pr.HijoDer() != null && pr.HijoDer().HijoIzq() != null & & pr.HijoDer().HijoIzq().GetElem() == y) return true; } if (ladoI == 2) { if (pr.HijoDer() != null && pr.HijoDer().HijoDer() != null & & pr.HijoDer().HijoDer().GetElem() == x) return true; if (pr.HijoDer() != null && pr.HijoDer().HijoIzq() != null & & pr.HijoDer().HijoIzq().GetElem() == x) return true; } return false; } return false; } private bool sonPrimos(int x, int y, Nodo pr) { if (pr == null) return false; if (Altura(pr) >= 3 && primos(pr, x, y))

return true; if (sonPrimos(x, y, pr.HijoIzq()) || sonPrimos(x, y, pr.HijoDer())) return true; else return false; } public bool sonPrimos(int x, int y) { return sonPrimos(x, y, raiz); } private bool esSuHijo(Nodo pr, int hijo) { if (pr == null) return false; if (!EsHoja(pr)) { if (pr.HijoDer() != null && pr.HijoDer().GetElem() == hijo) return true; if (pr.HijoIzq() != null && pr.HijoIzq().GetElem() == hijo) return true; } return false; } private int retornarTio(int sob, Nodo pr) { if (pr == null) return 0; if (!EsHoja(pr)) { if (esSuHijo(pr.HijoIzq(), sob)) if (pr.HijoDer() != null) return pr.HijoDer().GetElem(); else return 0; else if (esSuHijo(pr.HijoDer(), sob)) if (pr.HijoIzq() != null) return pr.HijoIzq().GetElem(); else return 0; } int tioD = retornarTio(sob, pr.HijoDer()); int tioI = retornarTio(sob, pr.HijoIzq()); if (tioD != 0) return tioD; else return tioI; } public int retornarTio(int sob) { return retornarTio(sob, raiz); } private int retornaAbuelo(Nodo pr, int x) { if (pr == null) return 0; if (Altura(pr) >= 3) { if (pr.HijoIzq() != null && esSuHijo(pr.HijoIzq(), x)) return pr.GetElem();

if (pr.HijoDer() != null && esSuHijo(pr.HijoDer(), x)) return pr.GetElem(); } int ai = retornaAbuelo(pr.HijoDer(), x); int ad = retornaAbuelo(pr.HijoIzq(), x); if (ai != 0) return ai; else if (ad != 0) return ad; else return 0; } public int retornaAbuelo(int x) { return retornaAbuelo(raiz, x); } public void EliminarNodo(Nodo pr, int x) { //no funciona if (pr == null) return; while (pr != null) { if (pr.GetElem() == x) { while (pr.HijoDer() != null) { pr.HijoIzq().HijoDer(pr.HijoDer()); } } } } private int promedio(Nodo pr) { int aux = 0,co=0,y=0; if (pr == null) { return 0; } else { while (pr != null) { aux = aux + pr.GetElem(); co++; } y = aux / co; } return co; } public int promedio() { return promedio(raiz); } //public int kesimo_mayor(int k) //{ //}

/////////////////////////////////////// public bool iguales(Arbol abr2) { this.PreOrden2(); abr2.PreOrden2(); Nodo pr = abr2.raiz; Nodo pr1 = this.raiz; int x = 0; int y = 0; int z = 0; x = this.Altura(raiz); y = abr2.Altura(raiz); if (x == y) { while (x > 0) { if (pr1.GetElem() == pr.GetElem()) { z++; } pr.HijoDer(); pr1.HijoDer(); x--; } } if (z == y) { return true; } else { return false; } } public int kesimo_mayor(int x) { this.InOrden2(); Nodo pr = this.raiz; int y = 1; int z = 0; int p = this.Cantidad(raiz); p = p - (x - 1); while (y <= p) { pr.HijoDer(); z = pr.GetElem(); MessageBox.Show(z.ToString()); y++; } return z; } public void PreOrden2() { PreOrden2(raiz); } private void PreOrden2(Nodo pr)

{ if (pr != null) { PreOrden2(pr.HijoIzq()); PreOrden2(pr.HijoDer()); } } /////////////////////////////// public void InOrden2() { InOrden2(raiz); } private void InOrden2(Nodo pr) { if (pr != null) { InOrden2(pr.HijoIzq()); InOrden2(pr.HijoDer()); } } } }

You might also like