Ejemplo n.º 1
0
        private void EliminarLlaveNodo(NodoAsteriscoo <TKey, T> nodo, TKey LlaveEliminar, int indiceLlaveNodo)
        {
            if (nodo.EsHoja)
            {
                nodo.Entradas.RemoveAt(indiceLlaveNodo);
                return;
            }
            NodoAsteriscoo <TKey, T> predecesorHijo = nodo.Hijos[indiceLlaveNodo];

            if (predecesorHijo.Entradas.Count >= this.Grado)
            {
                BEntry <TKey, T> predecessor = this.EliminarPredecesor(predecesorHijo);
                nodo.Entradas[indiceLlaveNodo] = predecessor;
            }
            else
            {
                NodoAsteriscoo <TKey, T> succesorHijo = nodo.Hijos[indiceLlaveNodo + 1];
                if (succesorHijo.Entradas.Count >= this.Grado)
                {
                    BEntry <TKey, T> successor = this.EliminarSucesor(predecesorHijo);
                    nodo.Entradas[indiceLlaveNodo] = successor;
                }
                else
                {
                    predecesorHijo.Entradas.Add(nodo.Entradas[indiceLlaveNodo]);
                    predecesorHijo.Entradas.AddRange(succesorHijo.Entradas);
                    predecesorHijo.Hijos.AddRange(succesorHijo.Hijos);



                    nodo.Entradas.RemoveAt(indiceLlaveNodo);
                    nodo.Hijos.RemoveAt(indiceLlaveNodo + 1);
                    this.EliminarInterno(predecesorHijo, LlaveEliminar);
                }
            }
        }
Ejemplo n.º 2
0
 public bool Equals(BEntry <TKey, T> other)
 {
     return(this.LLave.Equals(other.LLave) && this.Apuntador.Equals(other.Apuntador));
 }