C++ binary search tree
Use constructors to initialize your objects.

        root = new Node;
        root-&gt;val = n;
        root-&gt;left = nullptr;
        root-&gt;right = nullptr;


This should be replaced by:

        root = new Node(n);


Design

I think you will find that your code becomes a lot simpler if you move your test for null out of the public members. Then make the test for null the first thing you do in the private member (Don't test before you call the private member test as the first action in the call). This will simplify all the situations were you currently have to test for null.

For Example:
I would write addValue like this:

void BTree::addValue(int n) {
    root = addValue(n, root);
}
Node* BTree::addValue(int n, Node* current) {
    if (current == nullptr) {
        return new Node(n);
    }
    if (n &lt; current-&gt;val) {
        current-&gt;left  = addValue(n, current-&gt;left);
    else if (n &gt; current-&gt;val) {
        current-&gt;right = addValue(n, current-&gt;right);
    }
    return current;
}