#include <stdlib.h>
#include <stdio.h>
typedef struct BiThrNode {
char data;
struct BiThrNode *lchild, *rchild;
int ltag, rtag;
} BiThrNode, *BiThrTree;
BiThrNode *pre = (BiThrNode *)malloc(sizeof(BiThrNode));
void CreateBiTree(BiThrTree &T) {
char ch;
ch = getchar( );
if (ch == '@')
T = NULL;
else {
T = (BiThrNode *)malloc(sizeof(BiThrNode));
T->data = ch;
CreateBiTree(T->lchild);
CreateBiTree(T->rchild);
}
}
void InThreading(BiThrTree p) {
if (p) {
InThreading(p->lchild);
if (!p->lchild) {
p->ltag = 1;
p->lchild = pre;
} else {
p->ltag = 0;
}
if (!pre->rchild) {
pre->rtag = 1;
pre->rchild = p;
} else {
pre->rtag = 0;
}
pre = p;
InThreading(p->rchild);
}
}
int main() {
pre->rtag = 1;
pre->rchild = NULL;
BiThrTree tree;
printf("建立树,按先序遍历序列输入结点\n");
printf("空结点为@,结束按回车\n");
CreateBiTree(tree);
InThreading(tree);
printf("线索化完毕!\n");
return 0;
}