El Guru Programador
Usuario DESCONOCIDO | Registrate Gratis | Usuarios Registrados
Arboles_C#_Jorge_Luis_Valdes(UCI)
Autor [jlvaldes] Calificacion
Esta es la implementacion de árboles en C#. Le falta la implementacion visual. Espero les sirva.

using System.Collections;
namespace Tree_Lybrary_jl
{
public class Tree
{
private object raiz;
private ArrayList hijos;



public Tree()
{
hijos = new ArrayList();
raiz = new Object();

}

public Tree(object raiz_x)
{
raiz = raiz_x;
hijos = new ArrayList();
}




public ArrayList PHijos
{
get
{
return hijos;

}
}


public object PRaiz
{

set
{
raiz = value;
}

get
{
return raiz;
}

}





public int Grado()
{
return hijos.Count;
}


public bool Es_Hoja()
{
return (Grado() == 0);
}


public void Mi_Preorden(ArrayList hijos)
{
hijos.Add(raiz);
for (int i = 0; i < Grado(); i++)
{
(hijos[i] as Tree).Mi_Preorden(hijos);

}
}


public ArrayList Preorden()
{
ArrayList lista = new ArrayList();
Mi_Preorden(lista);
return lista;

}


public void Mi_Post_Orden(ArrayList hijos)
{
for (int i = 0; i < Grado(); i++)
{
(hijos[i] as Tree).Mi_Post_Orden(hijos);

}
}


public ArrayList Post_Orden()
{
ArrayList lista = new ArrayList();
Mi_Post_Orden(lista);
return lista;
}



public void Mi_Entre_Orden(ArrayList hijos)
{
if (Es_Hoja())
{
hijos.Add(raiz);
}
else
{
(hijos[0] as Tree).Mi_Entre_Orden(hijos);
hijos.Add(raiz);


for (int i =1; i<Grado(); i++)
(hijos[i] as Tree).Mi_Entre_Orden(hijos);
}
}



public ArrayList Entre_Orden()
{
ArrayList lista = new ArrayList();
Mi_Entre_Orden(lista);

return lista;
}



public bool Buscar(object raiz_x)
{
ArrayList lista = new ArrayList();
lista=Preorden();
int i=0;
if (lista.Count != 0)
{
while (i<lista.Count)
{
if (lista[i].ToString() == raiz_x.ToString())
return true;
else
i++;

}
return false;

}
return false;

}




public Tree Obtener(object raiz_x)
{
if (Buscar(raiz_x))
{
if (this.raiz.ToString() == raiz_x.ToString() && this.Es_Hoja())
return this;
else
{
if (this.raiz.ToString() == raiz_x.ToString() && !(this.Es_Hoja()))
return this;
else
{
if (this.raiz.ToString() != raiz_x.ToString() && !(this.Es_Hoja()))
{
for (int i = 0; i < Grado(); i++)
{
(hijos[i] as Tree).Obtener(raiz_x);

}
}
return null;

}

}
}
return null;
}






public void Podar(object raiz_x)
{
Obtener(raiz_x).hijos = null;
GC.Collect();
Obtener(raiz_x).hijos = new ArrayList();
}





public void Eliminar_Hermanos_Impares()
{
if (!Es_Hoja())
{
int i = 1;
bool flag = true;

while (i <= Grado())
{
if (flag)
{
(hijos[i] as Tree).hijos = null;
GC.Collect();
(hijos[i] as Tree).hijos = new ArrayList();
flag = false;
}
else
{
i++;
flag = true;
}
}
}
}



public void Eliminar_Arboles_Impares()
{
if (!Es_Hoja())
{
Eliminar_Arboles_Impares();
for (int i = 0; i <= Grado(); i++)
{
(hijos[i] as Tree).Eliminar_Arboles_Impares();

}
}
}



private void Mi_RecorAncho(ArrayList l, Queue c)
{

if (c.Count == 0)
c.Enqueue(this);

for (int i = 0; i < (c.Peek() as Tree).Grado(); i++)
c.Enqueue((c.Peek() as Tree).hijos[i]);

l.Add((c.Dequeue() as Tree).raiz);



for (int i = 0; i < Grado(); i++)
(hijos[i] as Tree).Mi_RecorAncho(l, c);

}



public ArrayList RecorAncho()
{
ArrayList lista = new ArrayList();
Queue cola = new Queue();
Mi_RecorAncho(lista, cola);
return lista;
}




public int Peso()
{
if (Es_Hoja())
return 0;
else
{
int max = 1 + (hijos[0] as Tree).Peso();

for (int j = 1; j < Grado(); j++)
{
int max_aux = 1 + (hijos[j] as Tree).Peso();
if (max <= max_aux)
max = max_aux;

}
return max+1;


}
}

public void Adicionar(object raiz_padre,object raiz_hijo_add)
{
if (Buscar(raiz_padre))
{
Obtener(raiz_padre).PHijos.Add(new Tree(raiz_hijo_add));
}

}




public void Adicionar_V1(object raiz_x)
{
Tree arbol = new Tree(raiz_x);
this.PHijos.Add(arbol);
}


public void Mi_Hojas_Arbol(ArrayList lista)
{
if (Es_Hoja())
lista.Add(raiz);
else
{
for (int i = 0; i < Grado(); i++)
{
(hijos[i] as Tree).Mi_Hojas_Arbol(lista);
}
}

}



public ArrayList Hojas_Arbol()
{
ArrayList lista = new ArrayList();
Mi_Hojas_Arbol(lista);
return lista;
}






}
}
 
Terminos de Uso

1 - Copiar o Descargarse este contenido implica aceptar los terminos aqui detallados.

2 - Usted puede utilizar este contenido en sus propios programas y puede compilarlo en un programa y modificarlo a su gusto.

3 - Usted NO PUEDE redistribuir este contenido tal como se presenta aqui sin el permiso del autor original del mismo.

4 - Usted seguirá cualquier restricción adicional del copyright que el autor pudo haber puesto en la descripción del contenido.

 

Contactos myStudio Network