C++将数组写入二叉树,遇到写入访问权限冲突的问题

任务是给定一个char型数组,元素'0'代表空结点。
要求用树的构造函数将数组写入二叉树中,我的想法是新建一个左结点和右结点,利用循环将数组中的元素一一写入二叉树中,但是在调用两个结点时遇到了写入权限访问的原因,源代码如下:

class Tree{
private:
    TreeNode* root;
    
public:
    Tree(char *array, int arrayLength);
    TreeNode* GetRoot() {return root;}
    void PreTraversal(TreeNode* root);
    void InTraversal(TreeNode* root);
    void PostTraversal(TreeNode* root);
    int TreeHight(TreeNode* root);
    void LevelTraversal();
};

class TreeNode{
       
public:
    int data;
    TreeNode* left;
    TreeNode* right;
    
    TreeNode(char x): data(x), left(NULL), right(NULL){}
};

Tree::Tree(char* array, int arrayLength){
    //Fill the code here.
    if (arrayLength == 0)
        return;
    TreeNode* root = new TreeNode(NULL);
    root->data = array[0];
    TreeNode* leftnode = new TreeNode('0');
    TreeNode* rightnode = new TreeNode('0');
    root->left = leftnode;
    root->right = rightnode;
    for (int i = 0; i <= arrayLength; i *= 2)
    {
        if (array[i + 1] == '0')
            leftnode = NULL;
        else
        {
            leftnode->data = array[i + 1];
            leftnode = leftnode->left;
        }
        if (array[i + 2] == '0')
            rightnode = NULL;
        else
        {
            rightnode->data = array[i + 2];
            rightnode = rightnode->right;
        }
    }
}

/**Pre-order traverse the constructed tree. The pointer to tree root is "root".*/
void Tree::PreTraversal(TreeNode* root){
    //Fill the code here.
    if (root)
    {
        cout << root->data;
        PreTraversal(root->left);
        PreTraversal(root->right);
   }
}

int main(int argc, char** argv) {
    //Construct the tree using each character in the array. You may change the input array.
    char array[] = "123456"; 
    
    int ArrayLength = sizeof(array)/sizeof(char);
    cout << "array length is: " << ArrayLength << endl;
    //The last character is "\0" which should not be counted in arrayLength.
    Tree* t = new Tree(array, ArrayLength-1); 
    cout << "Level construct of the tree is complete." << endl;
    cout << "Pre-order Traversal: ";
    t->PreTraversal(t->GetRoot());
    return 0;
}