仿照线性表的存储结构,在二叉树的线索链表上也添加一个头结点,并令其lchild域的指针指向二叉树的根结点,其rchild域的指针指向中序遍历时访问的最后一个结点;反之,令二叉树中序序列中的第一个结点的lchild域指针和最后一个结点rchild域的指针均指向头结点。这好比为二叉树建立了一个双向线索链表,既可从第一个结点起顺后继进行遍历,也可从最后一个结点起顺前驱进行遍历。
#include <stdio.h>
#include <stdlib.h>
#define OK 1
#define ERROR 0
typedef enum PointerTag {Link,Thread};
typedef int Status;
typedef struct BiTNode
{
int data;
struct BiTNode *lchild,*rchild;
PointerTag LTag,RTag;
}BiTNode,*BiTree;
int CreateBiTree(BiTree *T);
Status Visit(int e);
Status InOrderThreadTraverse(BiTree T);
Status InOrderThreadBackTraverse(BiTree T);
Status InOrderThreading(BiTree Thrt,BiTree T);
void InThreading(BiTree p,BiTree *pre);
Status MidOrderTraverse(BiTree T);
int main()
{
BiTree *T,Thrt;
T=(BiTree*)malloc(sizeof(BiTree));
Thrt=(BiTree)malloc(sizeof(BiTNode));
CreateBiTree(T);
printf("\n中序遍历结果:");
MidOrderTraverse(*T);
InOrderThreadi