1024程序员节日快乐 💯💯💯💯
目前正在考研,时间紧任务重,为了庆祝节日,发一篇博客吧。
本文阐述了我对BiTNode和*BiTree的简单理解的简单理解
1.声明一个结构体
typedef struct XXXBiTNode{
int data;
struct XXXBiTNode *lchild,*rchild;
}BiTNode,*BiTree;//二叉树结点结构
2.关于BiTNode和*BiTree的理解
typedef 是起一个别名的意思
在这里BiTNode实际上相当于struct XXXBiTNode
在结构体定义时:
struct XXXBiTNode varName来定义变量,
但要注意,使用XXXBiTNode varName来定义变量是不对的
因为struct和XXXBiTNode合在一起才能表示一个结构类型。
我们需要用typedef来起一个别名
使得BiTNode相当于struct XXXBiTNode,这样我们就可以使用BiTNode varName来定义变量。
同理:
struct XXXBiTNode *BiTree 将 struct XXXBiTNode *这个类型重命名为BiTree(BiTree被定义成了结构体地址类型)
当采用BiTree再定义指针时候:BiTree *root其本质就是struct XXXBiTNode **root
此时root是一个二级指针,二级指针变量root指向一级指针变量BiTree,并保存BiTree的地址
3.其他理解
在分配空间时:
一个指针节点需要的空间大小与BiTNode的大小和结构体内部结构有关。
因此分配空间的时候采用*root=(BiTNode *) malloc(sizeof (BiTNode));
分配一片大小为BiTNode的连续内存空间,然后返回首地址,root就指向这个地址。
root相当于门牌号,那么*就是家里的钥匙。
*root就是我打开地址为root的门(回家),开门之后我们才能看到家里的好吃的(取数据)。
因此*root才能进行赋值等操作,开门之后才能对家里的东西进行操作。