code: public static SkippableIterator treeand(SkippableIterator... bitmap) {
  		if (bitmap.length == 0)
  			throw new RuntimeException("nothing to process");
  		if (bitmap.length == 1)
  			return bitmap[0];
  		if (bitmap.length == 2)
  			return and2by2(bitmap[0], bitmap[1]);
  		if ((bitmap.length & 1) == 0) {// even
  			SkippableIterator[] si = new SkippableIterator[bitmap.length / 2];
  			for (int i = 0; i < si.length; ++i)
  				si[i] = and2by2(bitmap[2 * i], bitmap[2 * i + 1]);
  			return treeand(si);
  		}
  		// odd
  		SkippableIterator[] si = new SkippableIterator[bitmap.length / 2 + 1];
  		for (int i = 0; i < si.length - 1; ++i)
  			si[i] = and2by2(bitmap[2 * i], bitmap[2 * i + 1]);
  		si[si.length - 1] = bitmap[bitmap.length - 1];
  		return treeand(si);
  	}
docs: Treeand.
  
  @param bitmap
  the bitmap
  @return the skippable iterator