线索二叉树
线索二叉树
内容回顾:
- 二叉树的遍历过程较为复杂,需要用到递归或栈。
- 二叉树结点的遍历序列是一个线性系列。
- 二叉链表难以获得遍历序列前驱,后继结点信息。
- 二叉链表中,N个结点,2N个指针,N+1个空指针。
线索二叉树:
1. 线索二叉树基本概念
指向遍历序列前驱,后继结点的指针称为线索。
把空指针修改为线索的过程称为线索化。
经过线索化的二叉树称为线索二叉树。
含有线索的二叉链表称为线索链表。
线索二叉树的结点结构:
ltag为0时,lchild域指示结点的左孩子;为1时,lchild域指示结点的遍历前驱。
rtag为0时,rchild域指示结点的右孩子;为1时,rchild域指示结点的遍历后继。
typedef struct BiThrNode //二叉线索存储结点结构
{
TElemType data;
struct BiThrNode *lchild, *rchild; // 左右孩子指针
int LTag;
int RTag; // 左右标志
} BiThrNode, *BiThrTree;
线索二叉树的分类:
- 先序线索二叉树
- 中序线索二叉树
- 后序线索二叉树
先序序列:ABDGCEHF —>先序线索二叉树
<