code: private void delete(Node<K, V> n) {
          if (root == n) {
              deleteMin();
              n.o_c = null;
              n.y_s = null;
              n.o_s = null;
              return;
          }
  
          if (n.o_s == null) {
              throw new IllegalArgumentException("Invalid handle!");
          }
  
          // unlink from parent
          if (n.y_s != null) {
              n.y_s.o_s = n.o_s;
          }
          if (n.o_s.o_c == n) { // I am the oldest :(
              n.o_s.o_c = n.y_s;
          } else { // I have an older sibling!
              n.o_s.y_s = n.y_s;
          }
          n.y_s = null;
          n.o_s = null;
  
          // perform delete-min at tree rooted at this
          Node<K, V> t = combine(cutChildren(n));
  
          // and merge with other cut tree
          if (comparator == null) {
              root = link(root, t);
          } else {
              root = linkWithComparator(root, t);
          }
  
          size--;
      }
docs: /*
  Delete a node