BiTree &T 和 Bitree T 和 BitNode *T 和 T->lchild

typedef struct BitNode{
    int data;
    BitNode *lchild,*rchild;
}BitNode,*BiTree;

typedef有取别名的作用,所以BitNode的意思是struct BitNode{...),BiTree的意思是struct BitNode{...)*。

BiTree &T 是取指针地址的意思,如同int  &a,取a得地址一样。

BitNode *T  和  BiTree T 是定义结构指针变量。

有这种函数

       int insertBST(BiTree &T, int e) {
    BiTree p;
    if (!searchBST(T, e, NULL, p)) {
        BiTree s = (BiTree)malloc(sizeof(BitNode));
        s->data = e;
        s->lchild = s->rchild = NULL;
        if(!p)    
            T = s;
        else if LT(e, p->data)    p->lchild = s;
        else    p->rchild = s;
        return TRUE;
    }
    else    return FLASE;
}


它的参数是BiTree &T,这是为了对指针进行修改,而修改一个值,则必须知道它的地址,所以的取指针地址的地址,类似于int a,通过函数修改a,则需int local(int &a),一个道理。你也可以写成int insertBST(BitNode *(&T), int e),那么函数里面的 T->lchild,T->rchild,T->data是做什么的?它们在修改这个T指针,你的T指针一直是NULL,而你让它指向了(BiTree)malloc(sizeof(Node))这个空间!!!即一直在修改这个T指针,调试时你会发现你的T的地址发生了变化。那么你说你是不是要用他的引用啊!

你可能感兴趣的:(C/C++,数据结构与算法,数据结构,c语言,二叉树)