private IEnumerable <Tipo> MPRecorrerPostOrden(ClaseNodo <Tipo> nodoActual) { if (nodoActual != null) { foreach (Tipo t in MPRecorrerPostOrden(nodoActual.HijoIzq)) { yield return(t); } foreach (Tipo t in MPRecorrerPostOrden(nodoActual.HijoDer)) { yield return(t); } yield return(nodoActual.ObjetoConDatos); } }
//INSERTAR public void InsertarNodo(Tipo Objeto) { ClaseNodo <Tipo> hoja = new ClaseNodo <Tipo>(Objeto); if (Vacia) { Raiz = hoja; } else { ClaseNodo <Tipo> current = Raiz; bool noInsertado = true; while (noInsertado) { if (Objeto.CompareTo(current.ObjetoConDatos) == -1) { if (current.HijoIzq == null) { current.HijoIzq = hoja; noInsertado = false; } else { current = current.HijoIzq; } } else if (Objeto.CompareTo(current.ObjetoConDatos) == 1) { if (current.HijoDer == null) { current.HijoDer = hoja; noInsertado = false; } else { current = current.HijoDer; } } else { throw new Exception("No es posible registrar, el dato ya existe"); } } } }
private void RecorrerNodos(ClaseNodo <Rosticeria> NodoActual, ref string Resultado) { if (NodoActual != null) { if (NodoActual.HijoIzq != null) { Resultado = Resultado + "\n" + NodoActual.ObjetoConDatos.ToString() + "->" + NodoActual.HijoIzq.ObjetoConDatos.ToString() + ";"; } if (NodoActual.HijoDer != null) { Resultado = Resultado + "\n" + NodoActual.ObjetoConDatos.ToString() + "->" + NodoActual.HijoDer.ObjetoConDatos.ToString() + ";"; } RecorrerNodos(NodoActual.HijoIzq, ref Resultado); // Llamada recursiva para recorrer el subárbol izquierdo RecorrerNodos(NodoActual.HijoDer, ref Resultado); // Llamada recursiva para recorrer el subárbol derecho } }
//ELIMINAR // public Tipo EliminarNodo(Tipo objeto) {} //BUSCAR //public Tipo BuscarNodo(Tipo objeto) { } //VACIAR public void Vaciar() { Raiz = null; }
public ClaseABB() { Raiz = null; }