#include<iostream>
using namespace std;
typedef struct A
{
int data;
int height;
struct A* left;
struct A* right;
}*DD; //-----------DD是结构体的指针类型
void hanshu(DD& T)//既然root是指针那这里用&取地址符 //-------------由于本函数传入的T可能是个空指针,需要在函数中实现指针空间分配,所以必须用引用或者DD *T的方式才能实现
{
int n;
int x;
cin >> n;
for (int i = 0; i < n; n++)
{
cin >> x;
insert(T, x);//那这里的T为什么不写成*T呢? 要不然形参这里 insert(DD& T, int x)为什么用&取地址符呢?//------------因为insert参数为引用,所以这里只需要传递T,不需要传递*T
}
return;
}
DD insert(DD& T, int x) //--------------------与hanshu函数一个理由 ,因为函数内有T = new A,会给T分配空间,所以必须是引用或者 DD *T。当然由于insert函数有返回类型DD,所以本身insert函数参数可以是DD T的 ,但使用方式必须是 DD T; T = insert(T,x);这种方式
{
if (T == NULL)
{
T = new A;
}
return T;
}
int main(void)
{
DD root = NULL;//结构体别名这里的root是否就相当于*root=&DD 了? 这里的别名结构体root就是=*root了? //--------------这里只是将结构体指针赋值为空而已,*root=&DD 是乱写的,DD是类型,怎么取地址?
hanshu(root);//为什么这里不是*root呢? 别名typedef还可以让root省略*号吗? //----注意看hanshu参数的要求啊,要求是DD的引用类型啊,所以root就可以了啊
return 0;
}