// links y under x private void link(FibonacciHeapNode y, FibonacciHeapNode x) { removeFromSiblings(y); y.parent = x; if (x.child == null) x.child = y; else concatenateSiblings(x.child, y); x.degree++; y.mark = false; }
private void cascadingCut(FibonacciHeapNode y) { FibonacciHeapNode z = y.parent; if (z != null) { if (!y.mark) { y.mark = true; } else { cut(y, z); cascadingCut(z); } } }
// cut node x from below y private void cut(FibonacciHeapNode x, FibonacciHeapNode y) { // remove x from y's children if (y.child == x) y.child = x.nextSibling; if (y.child == x) y.child = null; y.degree--; removeFromSiblings(x); concatenateSiblings(x, min); x.parent = null; x.mark = false; }