code: private Node findParentNode(long node) {
          // assert node > 0;
  
          // find bit representation of node
          long[] s = { node };
          BitSet bits = BitSet.valueOf(s);
  
          // traverse path to last node
          Node cur = root;
          for (int i = bits.length() - 2; i > 0; i--) {
              if (bits.get(i)) {
                  cur = cur.o_c.y_s;
              } else {
                  cur = cur.o_c;
              }
          }
          return cur;
      }
docs: /*
  Start at the root and traverse the tree in order to find the parent node
  of a particular node. Uses the bit representation to keep the cost
  log(n).
  
  @param node the node number assuming that the root node is number one