private void SplitChild(Node parent, int i, Node child) { var z = new Node(); for (int j = 0; j < _lowerBound; j++) { z.AddOrUpdateKey(j, child[j + _t]); } if (!child.IsLeaf) { for (int j = 0; j < _t; j++) { z.AddOrUpdateChild(j, child.Children[j + _t]); } } for (int j = parent.Count(); j > i; j--) { parent.AddOrUpdateChild(j + 1, parent.Children[j]); } parent.AddOrUpdateChild(i + 1, z); for (int j = parent.Count() - 1; j >= i; j--) { parent.AddOrUpdateKey(j + 1, parent[j]); } parent.AddOrUpdateKey(i, child[_lowerBound]); child._keys.RemoveRange(_lowerBound, child.Count() - _t + 1); }