|
马上注册,结交更多好友,享用更多功能^_^
您需要 登录 才可以下载或查看,没有账号?立即注册
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是指针)
|
|