private static Node MergeTrees(Node node1, Node node2) // Both equal ranks and not null { if (node1.CompareTo(node2) < 0) { (node1, node2) = (node2, node1); } Node newRoot = node1; if (newRoot.Child == null) { newRoot.Child = node2; } else { node2.Prev = newRoot.Child.Prev; newRoot.Child.Prev.Next = node2; newRoot.Child.Prev = node2; } newRoot.Rank += 1; return(newRoot); }
private Node FindMax() { Node it = root.Next; Node max = root; while (it != null) { if (max.CompareTo(it) < 0) { max = it; } it = it.Next; } return(max); }