public void insert(string dValue) { Node234 curNode = root; DataItem tempItem = new DataItem(dValue); //Check to see if value already exists Node234 found = find(dValue); if (found != null) { DataItem it = found.getItem(found.findItem(dValue)); if (it != null) { it.occurences++; counter++; return; } else { throw new Exception("Could not find string occurence for: " + dValue); } } while (true) { if (curNode.isFull()) { split(curNode); curNode = curNode.getParent(); curNode = getNextChild(curNode, dValue); } else if (curNode.isLeaf()) { break; } else { curNode = getNextChild(curNode, dValue); } } curNode.insertItem(tempItem); counter++; }
private void split(Node234 thisNode) { DataItem itemB, itemC; Node234 parent, child2, child3; int itemIndex; itemC = thisNode.removeItem(); itemB = thisNode.removeItem(); child2 = thisNode.disconnectChild(2); child3 = thisNode.disconnectChild(3); Node234 newRight = new Node234(); if (thisNode == root) { root = new Node234(); parent = root; root.connectChild(0, thisNode); } else { parent = thisNode.getParent(); } itemIndex = parent.insertItem(itemB); int n = parent.getNumItems(); for (int j = n - 1; j > itemIndex; j--) { Node234 temp = parent.disconnectChild(j); parent.connectChild(j + 1, temp); } parent.connectChild(itemIndex + 1, newRight); newRight.insertItem(itemC); newRight.connectChild(0, child2); newRight.connectChild(1, child3); }