public void insertar(T valor, K llave) { elemento <T, K> elemento_insertar = new elemento <T, K>(valor, llave, comparador_); if (raiz.hijos.Count == 0) { raiz.elementos.Add(llave, elemento_insertar); raiz.llave = raiz.elementos.ElementAt(0).Key; if (raiz.elementos.Count == grado) { separar(raiz); } } else { insertar_hojas(valor, llave, raiz); } }
public void insertar_hojas(T valor, K llave, Nodo <T, K> nod) { if (nod.hijos.Count == 0) { elemento <T, K> elemento_aniadir = new elemento <T, K>(valor, llave, comparador_); nod.elementos.Add(llave, elemento_aniadir); Nodo <T, K> temp = nod; nod.padre.hijos.Remove(nod.llave); nod.padre.hijos.Add(nod.elementos.ElementAt(0).Key, temp); nod.llave = nod.elementos.ElementAt(0).Key; if (nod.elementos.Count == grado) { separar(nod); } } else { if (nod.elementos.ElementAt(0).Value.CompareTo(llave) < 0) { insertar_hojas(valor, llave, nod.hijos.ElementAt(0).Value); return; } for (int j = 0; j <= nod.elementos.Count - 2; j++) { if ((nod.elementos.ElementAt(j).Value.CompareTo(llave)) > 0 && (nod.elementos.ElementAt(j + 1).Value.CompareTo(llave) < 0)) { insertar_hojas(valor, llave, (nod.hijos.ElementAt(j + 1).Value)); return; } } if (nod.elementos.ElementAt(nod.elementos.Count - 1).Value.CompareTo(llave) > 0) { insertar_hojas(valor, llave, nod.hijos.ElementAt(nod.hijos.Count - 1).Value); return; } } }