// 5. Extract the node with the minimum key public int extractMin() { if (Nodes == null) return -1; BinomialHeapNode temp = Nodes, prevTemp = null; BinomialHeapNode minNode = Nodes.findMinNode(); while (temp.key != minNode.key) { gen(13, temp, prevTemp); prevTemp = temp; temp = temp.sibling; } if (prevTemp == null) { gen(14, temp, prevTemp); Nodes = temp.sibling; } else { gen(15, temp, prevTemp); prevTemp.sibling = temp.sibling; } temp = temp.child; BinomialHeapNode fakeNode = temp; while (temp != null) { gen(16, temp, prevTemp); temp.parent = null; temp = temp.sibling; } if ((Nodes == null) && (fakeNode == null)) { gen(17, temp, prevTemp); size = 0; } else { if ((Nodes == null) && (fakeNode != null)) { gen(18, Nodes, fakeNode); Nodes = fakeNode.reverse(null); size = Nodes.getSize(); } else { if ((Nodes != null) && (fakeNode == null)) { gen(19, Nodes, fakeNode); size = Nodes.getSize(); } else { gen(20, Nodes, fakeNode); unionNodes(fakeNode.reverse(null)); size = Nodes.getSize(); } } } return minNode.key; }
private int getSize() { return (1 + ((child == null) ? 0 : child.getSize()) + ((sibling == null) ? 0 : sibling.getSize())); }