*&代表什么?
这是C++的语法写法,&在形参中表示“引用”实参,
LNode * &lst ; 中LNode * 是个整体,表示变量类型是LNode类指针, &lst中的&表明引用实参,即代表实参的一个别名。
标准C是不支持这种写法的。
追问:
&不是取地址符吗? 引用参数是什么意思
追答:
&在变量定义区,表示引用,要注意它的用法,
&在变量操作区,表示取地址符,如:
int x=10, *p=&x ; //这里&作用在x上, 是取地址符
int &x ; //引用是C++引入的一个新特性,你要学的不是C++,则上述代码你是搞不懂的。 这里的&就表示引用。
//一般这种形式会在形参中出现。
LNode * &lst ; 中LNode * 是个整体,表示变量类型是LNode类指针, &lst中的&表明引用实参,即代表实参的一个别名。 操作引用变量就相当于操作实参变量
利用前序和中序求二叉树(源代码):
#include <iostream>
#include <cstdio>
#include <cstdlib>
#include <cstring>
using namespace std;;
const int N=31;
typedef struct BitNode
{
char value;
BitNode *lchild,*rchild;
}BitNode,*BiTree;
/* *&代表什么?
这是C++的语法写法,&在形参中表示“引用”实参,
LNode * &lst ; 中LNode * 是个整体,表示变量类型是LNode类指针, &lst中的&表明引用实参,即代表实参的一个别名。
标准C是不支持这种写法的。
追问
&不是取地址符吗? 引用参数是什么意思
追答
&在变量定义区,表示引用,要注意它的用法,
&在变量操作区,表示取地址符,如:
int x=10, *p=&x ; //这里&作用在x上, 是取地址符
int &x ; //引用是C++引入的一个新特性,你要学的不是C++,则上述代码你是搞不懂的。 这里的&就表示引用。 一般这种形式会在形参中出现。
LNode * &lst ; 中LNode * 是个整体,表示变量类型是LNode类指针, &lst中的&表明引用实参,即代表实参的一个别名。 操作引用变量就相当于操作实参变量
*/
void CreatTree(BitNode* &root,char *pre,int l1,int r1,char *in,int l2,int r2)
{
if(l1<=r1&&l2<=r2)
{
int key=pre[l1];
int midIndex=-1;
for(int i=l2;i<=r2;i++)
{
if(in[i]==key)
{
midIndex=i;
break;
}
}
root=(BitNode *)malloc(sizeof(BitNode));
root->value=key;
root->lchild=NULL;
root->rchild=NULL;
int llen=midIndex-l2;
CreatTree(root->lchild, pre, l1+1, l1+llen, in, l2, midIndex-1);
CreatTree(root->rchild, pre, l1+llen+1, r1, in, midIndex+1, r2);
}
}
void postOrderTraverse(BitNode *&root)
{
if(root->lchild)
postOrderTraverse(root->lchild);
if(root->rchild)
postOrderTraverse(root->rchild);
printf("%c",root->value);
}
int main()
{
char pre[N],in[N];
while(scanf("%s",pre)!=EOF)
{
scanf("%s",in);
int len1=strlen(pre);
int len2=strlen(in);
BitNode *root=NULL;
CreatTree(root,pre,0,len1-1,in,0,len2-1);
postOrderTraverse(root);
printf("\n");
}
return 0;
}
参考:https://zhidao.baidu.com/question/2266744263935050308.html