简单理解,如下代码:
int Swap1(int a, int b) {
int tmp = a;
a = b;
b = tmp;
}
int Swap2(int &a, int &b) {
int tmp = a;
a = b;
b = tmp;
}
Swap1中a,b的交换,形参不会改变实参的数值;Swap2中的a,b的交换,由于变量的引用,形参会改变实参的数值。
所以:
void CreateTree(BTNode *&root)
对于指针变量也有引用的使用,故若要在调用的函数中改变指针变量需要使用引用:
1、void CreateTree(BTNode *root) 是传值调用,这样原 root 的值是不能被改变的。形参是实参的一个copy。
2、void CreateTree(BTNode *&root) 是引用方式调用,若函数中 root指针进行改变,如生成左右孩子 , 那么原root也会改变。
void CreateTree(TreeNode* &tree) {
char data;
cin >> data;
if(data == '#') {
tree = NULL;
}
else {
tree = new TreeNode;
if(tree == NULL) return;
tree->val = data;
CreateTree(tree->left);
CreateTree(tree->right);
}
}
tree = new TreeNode;
对于创建二叉树,由于生成新结点会改变该值,所以需要使用引用该地址(或者二级指针),改变实参,这样才能形成一颗二叉树。