引入
上一节,我们试着解决了树在存储时空间浪费和没法找到双亲结点的问题,这一节,我们着重看一下如何用代码实现。这篇难度有一点大,请务必沉住气,认真仔细。
思路拆解
我们一步一步的拆解代码来看看。
创建树结构体
我们首先声明我们重新设计的线索二叉树结点
- char data 存放结点数据
- 左孩子、右孩子这个不用细说了吧,
- Ltag 和 Rtag 主要是判断左孩子和右孩子究竟是指向左右孩子还是前驱后继
- 我们定义结构体的时候,使用了 typedef
- 后面所有的 BiTNode 你可以理解为
struct BiTNode,代表该结构体 - 后面所有的 BiTree 你可以理解为
struct BiTNode *,代表结构体指针 - 注意上面有个星号哈!
#include <stdio.h>
#include <stdlib.h>
#define LEN sizeof(struct BiTNode)
typedef enum{link,thread} NodeState;
typedef struct BiTNode{
char data;
struct BiTNode *Lchild;
struct BiTNode *Rchild;
NodeState Ltag;
NodeState Rtag;
}BiTNode,*BiTree;







