typedef struct BiTNode
{
char data;
struct BiTNode *lchild,*rchild;
}BT;
void Creat(BT **T)
{ char c;
scanf("%c",&c);
(**T).data=c; //或 (*T)->data = c;
Creat(&(*T)->lchild);
Creat(&(*T)->rchild);
}
void main()
{
BT Tree;
Creat(&&Tree);
}
为什么要用双重指针?
为什么不是以下的写法?
void Creat(BT *T)
{ char c;
scanf("%c",&c);
T->data=c;
Creat(&(*T)->lchild);
Creat(&(*T)->rchild);
}
void main()
{
BT *Tree;
Creat(Tree);
}
因为是动态创建二叉树的每个节点,所以malloc写在了Creat里*Tree是一个节点
Tree是该节点的地址
&Tree是该节点的地址的地址
当Creat(Tree)时
要求传入*Tree节点的指针
可是节点还没被定义
这个指针没有指向,是野指针,无法代入函数
好在,这个指针的指针是指向这个Tree的,能代入
所以才用双指针