public static MyArbol <T3> CopiaArbol <T3>(Arbol <T3> raiz) { MyArbol <T3> temp = new MyArbol <T3>(raiz.Valor, new MyArbol <T3> [0]); CopiaArbol(raiz, temp); return(temp); }
public MyArbol <T1> AgregaHijo(T1 valorHijo) { MyArbol <T1> temp = new MyArbol <T1>(valorHijo, new MyArbol <T1> [0]); this.hijos.Add(temp); return(temp); }
public static void CopiaArbol <T2>(Arbol <T2> arbolActual, MyArbol <T2> copiaActual) { foreach (var hijo in arbolActual.Hijos) { MyArbol <T2> hijoCopiaActual = copiaActual.AgregaHijo(hijo.Valor); CopiaArbol(hijo, hijoCopiaActual); } }
public static void Poda <T4>(MyArbol <T4> arbolActual, MyArbol <T4> padre, List <T4> elementos) { if (arbolActual.Hijos.Count == 0) { elementos.Add(arbolActual.Valor); if (arbolActual != padre) { padre.EliminaHijo(arbolActual); } } foreach (var hijo in arbolActual.Hijos) { Poda(hijo, arbolActual, elementos); } }
public static IEnumerable <R> IteraHojas <T7, R>(Arbol <T7> arbol, Func <T7, R> operacion) { List <T7> elementosOrdenados = new List <T7>(); MyArbol <T7> myCopia = CopiaArbol(arbol); while (myCopia.Hijos.Count != 0) { Poda(myCopia, myCopia, elementosOrdenados); } elementosOrdenados.Add(arbol.Valor); foreach (var el in elementosOrdenados) { yield return(operacion(el)); } }
public void EliminaHijo(MyArbol <T1> hijo) { this.hijos.Remove(hijo); }