public final void reorganize() {
		mRoot.all(mOutside);

		// Determine the union of all contained bounds
		int x = 0;
		int y = 0;
		int width = 0;
		int height = 0;
		for (T one : mOutside) {
			int otherWidth = one.getWidth();
			if (otherWidth > 0) {
				int otherHeight = one.getHeight();
				if (otherHeight > 0) {
					int otherX = one.getX();
					int otherY = one.getY();
					if (width <= 0 || height <= 0) {
						x = otherX;
						y = otherY;
						width = otherWidth;
						height = otherHeight;
					} else {
						int x1 = Math.min(x, otherX);
						int y1 = Math.min(y, otherY);
						width = Math.max(x + width, otherX + otherWidth) - x1;
						height = Math.max(y + height, otherY + otherHeight) - y1;
						x = x1;
						y = y1;
					}
				}
			}
		}

		mRoot = new Node<>(x, y, width, height, mThreshold);
		for (T one : mOutside) {
			mRoot.add(one);
		}
		mOutside = new HashSet<>();
	}