线索二叉树的定义
在二叉链表中, 具有 n 个结点的二叉链表有 n + 1 个空指针域. 由此, 可以利用这些空指针域来存放结点的直接前驱和直接后继的信息
结点的存储结构
lchild | ltag | data | rtag | rchild |
---|---|---|---|---|
左孩子结点 | 前驱结点标志域 | 数据域 | 后继结点标志域 | 右孩子结点 |
含义
当 ltag = 0 时, lchild 指向结点的左孩子;
当 ltag = 1 时, lchild 指向结点的直接前驱;
当 rtag = 0 时, rchild 指向结点的右孩子;
当 rtag = 1 时, rchild 指向结点的直接后继
二叉树的线索化图解
线索二叉树的实现
线索二叉树的定义
//定义一个线索二叉树
typedef enum {
Linked, Thread } PointTag;
typedef struct Node {
char data;
struct Node* lchild;
struct Node* rchild;
PointTag ltag;
PointTag rtag;
}BitNode, *BiTree;
创建一个二叉树
//创建一个二叉树
void CreateBiTree(BiTree* T) {
char ch = 0;
scanf("%c", &ch);
if (ch == ' ') {
*T = NULL;
} else {
*T = (BiTree)malloc(sizeof(BitNode));
if (!(*T)) {
exit(-1);
}
(*T)->data = ch;
CreateBiTree(&((*T)->lchild));