I'm trying to create a binary search tree but it doesn't seem to be working. I debugged it, and it says the root is null. I don't understand why it is null. I set it to null initially in the constructor, but then when I call the insert() method, it is no longer null, right? Can someone help me understand this. Thanks.
#include "stdafx.h"
    #include <iostream>
using namespace std;
struct node
{
public:
    int value;
    node * left;
    node * right;
};
class bTree
{
public:
    node * root;
public:
    bTree();
    void insert(node * r, int val);
    void insert(int val);
    void traversePreorder();
    void traversePreorder(node * r);
};
bTree::bTree()
{
    root = NULL;
}
void bTree::insert(node * r, int val)
{
    if (r == NULL)
    {
        r = new node();
        r->value = val;
        r->left = NULL;
        r->right = NULL;
        return;
    }
    else
    {
        if (val <= r->value)
        {
            insert(r->left, val);
        }
        else
        {
            insert(r->right, val);
        }
    }
}
void bTree::insert(int val)
{
    insert(root, val);
}
void bTree::traversePreorder(node * r)
{
    if (root == nullptr)
        return;
    else
    {
        cout << root->value << " ";
        traversePreorder(root->left);
        traversePreorder(root->right);
    }
}
void bTree::traversePreorder()
{
    traversePreorder(root);
}
int main()
{
    bTree * myTree = new bTree();
    myTree->insert(30);
    myTree->insert(40);
    myTree->insert(20);
    myTree->insert(10);
    myTree->insert(50);
    myTree->traversePreorder();
    return 0;
}
 
     
    