马上注册,结交更多好友,享用更多功能^_^
您需要 登录 才可以下载或查看,没有账号?立即注册
x
#include <stdio.h>
#include <stdlib.h>
//Link(0)代表左右子树
//Thread(1)代表前驱或者后继
typedef enum{Link,Thread} PointerTag;
//线索二叉树
typedef struct ThreadBiTree{
char data;
struct ThreadBiTree *lchild,*rchild;
PointerTag ltag;
PointerTag rtag;
} ThreadBiTreeNode,*ThrBiTree;
//前序遍历创建线索二叉树
//ThrBiTree *T,这里的*T是二级指针吗?
void createThreadBiTree(ThrBiTree *T)
{
char c;
scanf("%c",&c);
if(' ' == c)
{
*T = NULL;//如果接收的是空格,就代表是空树(第一次就输入空格),或者是没有孩子,所以将二级指针指向NULL
}else{
//如果接收的不是空格,说明有孩子,就在堆里申请内存空间
//下面的这行代码不能理解,为什么=左边要用*T接收?而不用T接收?
*T = (ThrBiTree)malloc(sizeof(ThreadBiTreeNode));
(*T)->data = c;
(*T)->ltag = Link;
(*T)->rtag = Link;
//createThreadBiTree(&(*T)->lchild);
// createThreadBiTree(&(*T)->rchild);
}
}
int main()
{
// 定义一级指针变量t
ThrBiTree t = NULL;
printf("%p \n", t);
printf("%p \n", &t);
// 传递一级指针t的地址,所以createThreadBiTree函数的形参是一个接收一级指针地址的指针,也就是二级指针。
createThreadBiTree(&t);
return 0;
}
函数参数中的 * 表示T是指针
函数体中的 * 表示解引用(不是指定义变量的时候,int *p = NULL; 这里的 *指的是 p是指针)
|