private static BalancedTree<Integer, Integer> createRedBlackTreeAsComplete() {
    Comparator<Integer> comp =
        new Comparator<Integer>() {

          public int compare(Integer o1, Integer o2) {
            return o1 - o2;
          }
        };
    BalancedTree<Integer, Integer> bt = new BalancedTree<Integer, Integer>(comp);

    // for perfect balanced tree, we must create FULL tree which is greater
    // than n (this is 2^20).
    int k = (int) (Math.log(n) / Math.log(2));
    int b = (int) Math.pow(2, k);
    int i = 0;
    while (b > 0) {
      bt.insert(b, b);

      for (int j = 1; j <= Math.pow(2, i) - 1; j++) {
        bt.insert(b + 2 * b * j, b + 2 * b * j);
      }

      b = b / 2;
      i++;
    }

    return bt;
  }
  private static BalancedTree<Integer, Integer> createRedBlackTree() {
    Comparator<Integer> comp =
        new Comparator<Integer>() {

          public int compare(Integer o1, Integer o2) {
            return o1 - o2;
          }
        };
    BalancedTree<Integer, Integer> bt = new BalancedTree<Integer, Integer>(comp);

    for (int i = 1; i <= n; i++) {
      bt.insert(i, i);
    }

    return bt;
  }
  static int countComparisons(int k) {
    BalancedBinaryNode<Integer, Integer> node = tree.root();

    int ct = 0;
    while (node != null) {
      ct++;
      if (k < node.key()) {
        node = node.left();
      } else if (k == node.key()) {
        return ct;
      } else {
        node = node.right();
      }
    }

    return ct;
  }