@Override
	public boolean insert(final char character, final int level) {
		if (level == 1) { // Char should be one of sons
			// We checked isFull at the previous level so one of them is null
			if (left == null) {
				left = new Leaf(character);
			} else { // right == null
				right = new Leaf(character);
				isFull = true;
			}
			return isFull;
		} else {
			// First try to insert left
			if (left == null) {
				left = new BinaryNode(null, null);
				left.insert(character, level - 1);
				return false;
			} else if (!left.isFull) {
				left.insert(character, level - 1);
				return false;
			}
			// Left is full, try to insert right
			else if (right == null) {
				right = new BinaryNode(null, null);
				right.insert(character, level - 1);
				return false;
			} else if (!right.isFull) {
				isFull = right.insert(character, level - 1);
				return isFull;
			}
			// This could only happen if the Tree String was malformed / transformed
			else {
				throw new IllegalArgumentException("Malformed file");
			}
		}
	}