c语言中序线索化二叉树的函数参数有这样一段代码BiThrTree &Thrt,这里的&做什么用?

Status InOrderThreading(BiThrTree &Thrt, BiThrTree T) { // 算法6.6
// 中序遍历二叉树T,并将其中序线索化,Thrt指向头结点。
if (!(Thrt = (BiThrTree)malloc(sizeof(BiThrNode)))) exit(OVERFLOW);
Thrt->LTag = Link; Thrt->RTag =Thread; // 建头结点
Thrt->rchild = Thrt; // 右指针回指
if (!T) Thrt->lchild = Thrt; // 若二叉树空,则左指针回指
else {
Thrt->lchild = T; pre = Thrt;
InThreading(T); // 算法6.7:中序遍历进行中序线索化
pre->rchild = Thrt; pre->RTag = Thread; // 最后一个结点线索化
Thrt->rchild = pre;
}
return OK;
} // InOrderThreading

上面是CD上的原代码,我自己编的时候编译不成功,我觉得是&的某处没懂,麻烦各位,指点一下此处&的意义。

没分,,,我深表歉意。帮帮忙。

第1个回答  2011-02-28
你的那个代码从风格上看应该是严蔚敏书里的。
需要注意的是,那本书里的代码采用的是类C语言,并不能直接拿来就用,而是要根据需要和环境进行一定的修改。里面的&是借鉴了C++里的引用的概念,是想说在函数中的改变会作用到Thrt变量自身,而不是作用到那个变量的一个副本上。如果用C语言,可以改为指针形式的,如果用C++,则也可以采用引用。只要能够改变那个变量即可。追问

果然有道理,这样的话,我是不是可以这样。
我定义的函数:void inthreadtree(struct bithrnode *thrt,struct bithrnode *root)
然后在main函数中引用inthreadtree(thrt,root)
这样能行吗?

追答

先看原函数,Status InOrderThreading(BiThrTree &Thrt, BiThrTree T);
因此在C语言中用指针的话,函数的参数类型应该为(BiThrTree * Thrt,BiThrTree T)。我们知道BiThrTree本来就是struct BiThrNode *类型的,因此参数类型就是(struct BiThrNode **Thrt,struct BiThrNode *T)。由此可见,void inthreadtree(struct bithrnode *thrt,struct bithrnode *root)是达不到预定的效果的。

本回答被提问者采纳

...有这样一段代码BiThrTree &Thrt,这里的&做什么用?
里面的&是借鉴了C++里的引用的概念,是想说在函数中的改变会作用到Thrt变量自身,而不是作用到那个变量的一个副本上。如果用C语言,可以改为指针形式的,如果用C++,则也可以采用引用。只要能够改变那个变量即可。

线索二叉树的构建
voidInThreading(BiThrTree*p);\/\/预先声明BiThrNodeType*pre;BiThrTree*InOrderThr(BiThrTree*T){\/*中序遍历二叉树T,并将其中序线索化,pre为全局变量*\/BiThrTree*head;\/\/线索二叉树的头结点,指向根结点head=(BitThrNodeType*)malloc(sizeof(BitThrNodeType));\/*设申请头结点成功*\/head->...

已知先序中序求后序的算法:
首先看先序(根左右),说明A是根,再看中序(左根右),说明A之前的(DBMGNE)都是A的左边,A之后的(CHF)都在A的右边。在看先序的BDEGMN 同样是根左右,B就是A的左子节点,再看中序的DBMGNE,同样是左根右,D就是B的左孩子(而且左边也只有这一个)。。。继续看先序的EGMN,同样是根...

相似回答