typedef struct treeT
{
ElemType key;
struct treeT* left;
struct treeT* right;
}treeT, *pTreeT;
int main(int argc, char *argv[]) {
pTreeT root = NULL;
pTreeT* a ;
a = &root;
BT_Insert(rand() % BASE,a);
// BT_Insert(rand() % BASE,&root);
system("pause");
return;
}
pTreeT BT_Insert(ElemType target, pTreeT* ppTree){
pTreeT Node;
assert( NULL != ppTree );
Node = *ppTree;
if (NULL == Node)
{
return *ppTree = BT_MakeNode(target);
}
}
static pTreeT BT_MakeNode(ElemType target)
{
pTreeT pNode = (pTreeT) malloc(sizeof(treeT));
assert( NULL != pNode );
pNode->key = target;
pNode->left = NULL;
pNode->right = NULL;
return pNode;
}
{
ElemType key;
struct treeT* left;
struct treeT* right;
}treeT, *pTreeT;
int main(int argc, char *argv[]) {
pTreeT root = NULL;
pTreeT* a ;
a = &root;
BT_Insert(rand() % BASE,a);
// BT_Insert(rand() % BASE,&root);
system("pause");
return;
}
pTreeT BT_Insert(ElemType target, pTreeT* ppTree){
pTreeT Node;
assert( NULL != ppTree );
Node = *ppTree;
if (NULL == Node)
{
return *ppTree = BT_MakeNode(target);
}
}
static pTreeT BT_MakeNode(ElemType target)
{
pTreeT pNode = (pTreeT) malloc(sizeof(treeT));
assert( NULL != pNode );
pNode->key = target;
pNode->left = NULL;
pNode->right = NULL;
return pNode;
}
定义一个treeT的结构体变量,pTreeT是一个指向treeT的指针类型,main函数中 pTreeT root = NULL 定义了一个指向结构变量的指针,类型为pTreeT,名字叫root,如图1。初值为null,然后pTreeT* a定义了一个 指向结构体指针的指针,名字为a ,把root地址的值赋给a 如图2。执行BT_Insert(rand() % BASE,a);,与执行BT_Insert(rand() % BASE,&root);效果是一样的,函数pTreeT BT_Insert(ElemType target, pTreeT* ppTree)传入参数,第一个为ElemType类型,第二个为 pTreeT* ,pTreeT本来就是指针类型, pTreeT* 为指向指针的指针,即是存储 pTreeT地址的变量 名称为ppTree, 返回类型是 pTreeT类型 。BT_Insert函数中定义了一个pTreeT 类型变量Node 执行 Node = *ppTree;后,Node指向了root 此时,Node 值为null , if (NULL == Node)判断后, 调用 BT_MakeNode 函数, BT_MakeNode 返回一个 pTreeT 类型的变量 pNode,
最后内存中结果图示为(4) (纯属个人见解,有错请指出o(∩_∩)o )