Exemplo n.º 1
0
        private void EliminarIDNodo(NodoBArbol <TK, TP> NodoTemp, TK IdAEliminar, int IndiceIDenNodo)
        {
            if (NodoTemp.EsHoja)
            {
                NodoTemp.ListaValores.RemoveAt(IndiceIDenNodo);
                return;
            }

            NodoBArbol <TK, TP> HijoPredecesor = NodoTemp.ListaHijos[IndiceIDenNodo];

            if (HijoPredecesor.ListaValores.Count >= this.Grado)
            {
                Indice <TK, TP> IndicePredecesor = this.BorrarPredecesor(HijoPredecesor);
                NodoTemp.ListaValores[IndiceIDenNodo] = IndicePredecesor;
            }
            else
            {
                NodoBArbol <TK, TP> HijoSucesor = NodoTemp.ListaHijos[IndiceIDenNodo + 1];

                if (HijoSucesor.ListaValores.Count >= this.Grado)
                {
                    Indice <TK, TP> Sucesor = this.BorrarSucesor(HijoPredecesor);
                    NodoTemp.ListaValores[IndiceIDenNodo] = Sucesor;
                }
                else
                {
                    HijoPredecesor.ListaValores.Add(NodoTemp.ListaValores[IndiceIDenNodo]);
                    HijoPredecesor.ListaValores.AddRange(HijoSucesor.ListaValores);
                    HijoPredecesor.ListaHijos.AddRange(HijoSucesor.ListaHijos);

                    NodoTemp.ListaValores.RemoveAt(IndiceIDenNodo);
                    NodoTemp.ListaHijos.RemoveAt(IndiceIDenNodo + 1);

                    this.EliminarInterno(HijoPredecesor, IdAEliminar);
                }
            }
        }
Exemplo n.º 2
0
 public bool Equals(Indice <TK, TP> other)
 {
     return(this.ID.Equals(other.ID) && this.Apuntador.Equals(other.Apuntador));
 }