public void Fusionar(Nodo n1) { int totalLlaves = n1.Llaves.Count; int totalHijos = n1.Hijos.Count; totalLlaves += this.Llaves.Count; totalHijos += this.Hijos.Count; for (int x = 0; x < n1.Llaves.Count; x++) { Medicamento valor = n1.Llaves[x]; this.Push(valor); } for (int x = Hijos.Count - 1; x >= 0; x--) { Nodo e = n1.eliminarHijo(x); this.insertarNodo(e); } }
void Busca(Nodo nNodo, Medicamento item) { Nodo recorre = null; recorre = Raiz; while (recorre.Medicamento.Nombre != item.Nombre && recorre != null) { int comparison = String.Compare(item.Nombre, recorre.Medicamento.Nombre, comparisonType: StringComparison.OrdinalIgnoreCase); if (comparison < 1) { recorre = recorre.izquierdo; } else { recorre = recorre.Derecho; } } AuxBusqueda = recorre; }
//AGREGA UN NUEVO ELEMENTO public void AgregarElemento(Medicamento item) { Nodo nuevo = new Nodo(item); nuevo.izquierdo = null; nuevo.Derecho = null; if (Raiz == null) { Raiz = nuevo; } else { Nodo anterior = null; Nodo recorre = null; recorre = Raiz; while (recorre != null) { anterior = recorre; int comparison = String.Compare(item.Nombre, recorre.Medicamento.Nombre, comparisonType: StringComparison.OrdinalIgnoreCase); if (comparison < 1) { recorre = recorre.izquierdo; } else { recorre = recorre.Derecho; } } int comparison2 = String.Compare(item.Nombre, anterior.Medicamento.Nombre, comparisonType: StringComparison.OrdinalIgnoreCase); if (comparison2 < 1) { anterior.izquierdo = nuevo; } else { anterior.Derecho = nuevo; } } }
public void Eliminar(string k) { Nodo actual = Raiz; Nodo papa = null; while (actual != null) { if (actual.Llaves.Count == 1) { if (actual != Raiz) { string nombre = actual.Llaves[0].nombre; int posicionHijo = papa.posicionHijo(nombre); bool?caminoDerecho = null; Nodo hermano = null; if (posicionHijo > -1) { if (posicionHijo < 3) { hermano = papa.obtenerHijo(posicionHijo + 1); if (hermano.Llaves.Count > 1) { caminoDerecho = true; } } if (caminoDerecho == null) { if (posicionHijo > 0) { hermano = papa.obtenerHijo(posicionHijo - 1); if (hermano.Llaves.Count > 1) { caminoDerecho = false; } } } if (caminoDerecho != null) { Medicamento tmp; Medicamento tmp2; if (caminoDerecho.Value) { tmp = papa.Pop(posicionHijo); tmp2 = hermano.Pop(0); if (hermano.Hijos.Count > 0) { Nodo nod = hermano.eliminarHijo(0); actual.insertarNodo(nod); } } else { tmp = papa.Pop(posicionHijo); tmp2 = hermano.Pop(hermano.Llaves.Count - 1); if (hermano.Hijos.Count > 0) { Nodo nod = hermano.eliminarHijo(hermano.Hijos.Count - 1); actual.insertarNodo(nod); } } papa.Push(tmp2); actual.Push(tmp); } else { Medicamento tmp = null; if (papa.Hijos.Count >= 2) { if (posicionHijo == 0) { tmp = papa.Pop(0); } else if (posicionHijo == papa.Hijos.Count) { tmp = papa.Pop(papa.Llaves.Count - 1); } else//take papa's middle key { tmp = papa.Pop(1); } if (tmp != null) { actual.Push(tmp); Nodo sib = null; if (posicionHijo != papa.Hijos.Count) { sib = papa.eliminarHijo(posicionHijo + 1); } else { sib = papa.eliminarHijo(papa.Hijos.Count - 1); } actual.Fusionar(sib); } } else { actual.Fusionar(papa, hermano); Raiz = actual; papa = null; } } } } } { //Verificar si el nodo actual tiene el valor buscado int rmPos = -1; if ((rmPos = actual.tieneLlave(k)) >= 0) //Si se encontro una llave { //Si es una hoja, simplemente remover la llave if (actual.Hijos.Count == 0) { actual.Pop(rmPos); //Remover valor en la posicion encontrada } //Si no es hoja, reemplazar con la siguiente llave de mayor valor else { Nodo Siguiente = Min(actual.Hijos[rmPos]); if (Siguiente.Llaves.Count > 1) { Siguiente.Pop(0); } else { Siguiente.Padre.eliminarHijo(Siguiente); } } actual = null; } //Si no se encontro el valor buscado, seguir recorriendo arbol else { int p = actual.posicionHijo(k); papa = actual; actual = actual.obtenerHijo(p); } } } }
public Nodo(Medicamento Medicamento) { this.Medicamento = Medicamento; }
private int compararmedicamentos(Medicamento med1, Medicamento med2) { return(String.Compare(med1.nombre, med2.nombre)); }
public bool compararMedicamentos(Medicamento med1, Medicamento med2) { return(String.Compare(med1.nombre, med2.nombre) > 0); }
public Nodo(Medicamento Medicamento, Nodo anterior) { this.medicamento = Medicamento; this.indice = Medicamento.id; this.padre = anterior; }
public Nodo(Medicamento Medicamento) { this.medicamento = Medicamento; this.indice = Medicamento.id; }
public void EliminarElemento(Medicamento item) { Nodo anterior = null; Nodo recorre = null; Nodo AUX = null; recorre = Raiz; while (recorre != null && recorre.Medicamento != null && recorre.Medicamento.Nombre != item.Nombre) { anterior = recorre; int comparison = String.Compare(item.Nombre, recorre.Medicamento.Nombre, comparisonType: StringComparison.OrdinalIgnoreCase); if (comparison < 1) { recorre = recorre.izquierdo; } else { recorre = recorre.Derecho; } } Nodo guarda = null; if (recorre != null && recorre.izquierdo == null && recorre.Derecho == null) { recorre.Medicamento = null; } if (recorre != null && recorre.izquierdo == null && recorre.Derecho != null) { guarda = recorre.Derecho; recorre.Derecho.Medicamento = null; recorre.Medicamento = guarda.Medicamento; } if (recorre != null && recorre.izquierdo != null && recorre.Derecho == null) { guarda = recorre.izquierdo; recorre.izquierdo.Medicamento = null; recorre.Medicamento = guarda.Medicamento; } if (recorre != null && recorre.izquierdo != null && recorre.Derecho != null) { Nodo recorre2 = null; Nodo ant2 = null; recorre2 = recorre.Derecho; while (recorre2 != null) { ant2 = recorre2; recorre2 = recorre2.izquierdo; } AUX = ant2; if (ant2.Derecho != null) { guarda = ant2.Derecho; ant2.Derecho = null; recorre.Derecho = guarda; recorre.Medicamento = AUX.Medicamento; } else { recorre.Medicamento = AUX.Medicamento; ant2.Medicamento = null; } } }
//BUSCA UN ELEMENTO PARA ACTUALIZAR SUS DATOS public void ActualizaDatos(Medicamento data) { BuscaActualiza(Raiz, data); }
Nodo AuxBusqueda; // VARIABLE PARA GUARDAR EL ELEMENTO ENCONTRADO public Nodo BuscaRegresa(Medicamento data) { AuxBusqueda = null; Busca(Raiz, data); return(AuxBusqueda); }