关于二叉树树的创建的细节

关于二叉树树的创建的细节
#include

using namespace std;

class tree {
public:
char val;
tree* lchild;
tree* rchild;
void creatTree(tree* T)
{
char ch;
ch = getchar();
if (ch == '#')
{
T = NULL;
}
else
{
T = new tree;
T->val = ch;
creatTree(T->lchild);
creatTree(T->rchild);
}
}
void VLR(tree* T)
{
if (T == NULL)
{
return;
}
else {
cout << T->val;
VLR(T->lchild);
VLR(T->rchild);
}
}

};

int main()
{
tree t;
tree* T;
t.creatTree(T);
t.VLR(T);
}

报错提示

严重性 代码 说明 项目 文件 行 禁止显示状态
警告 C6001 使用未初始化的内存“T”。 10.22二叉树学习 C:\Users\楚和周扬\source\repos\10.22二叉树学习\10.22二叉树学习.cpp 47
严重性 代码 说明 项目 文件 行 禁止显示状态
错误 C4700 使用了未初始化的局部变量“T” 10.22二叉树学习 C:\Users\楚和周扬\source\repos\10.22二叉树学习\10.22二叉树学习.cpp 47

我想要达到的结果

在 void creatTree(tree* T)
{
char ch;
ch = getchar();
if (ch == '#')
{
T = NULL;
}
else
{
T = new tree;
T->val = ch;
creatTree(T->lchild);
creatTree(T->rchild);
}
}这一段代码中void creatTree(tree* T)加上&变成void creatTree(tree* &T)就可以运行了,这是为什么呢?