关于形参引用的有关问题,跪求大神指导

关于形参引用的问题,跪求大神指导!
想问下各位以下函数的形参用引用和不用引用有什么区别?

BitNode* BinaryTree::CreatTree(Stack &a){  //生成二叉树(中右左) 

char x;
x=a.pop();       
BitNode *root=new BitNode;//构建新的根节点
if(x!='0'){        
root->data=x;
root->rchild=CreatTree(a);
root->lchild=CreatTree(a);
return root;
}
else 
return NULL;
}
运行的时候如果形参不用引用,左子树就生成的和右子树一样,形参用引用左子树才能正常生成,求大神解释啊~~~

------解决方案--------------------
引用相当于传地址, 即函数内部修改了变量时, 实际就是修改的外部传入的那个变量

而不使用引用, 那就是传值调用, 函数中就是一个新对象, 对象一个副本, 函数内部修改了, 外面的不会变.
------解决方案--------------------
引用形参是实参的别名,是实参的另一个名字,在函数里对引用形参的修改实际是对实参的修改。如果形参不是引用,那么对形参就是实参的一个拷贝,对其修改不影响实参。如果形参是指针,那么传递的是地址。