private Node<E> insert(Node<E> node, E value) {
		Node<E> result = new Node<E>(node);
		int compare = result.value.compareTo(value);
		if (compare == 0) return result;
		if (compare > 0) {
			if (result.left != null) {
				result.left = insert(result.left, value);
			} else {
				result.left = new Node<E>(value);
				size++;
			}
		} else if (compare < 0) {
			if (result.right != null) {
				result.right = insert(result.right, value);
			} else {
				result.right = new Node<E>(value);
				size++;
			}
		}
		return result;
	}