二叉树边遍历边线索化
引入pre指针
中序二叉树的线索化
typedef struct ThreadNode {
int data;
struct ThreadNode* lchild, * rchild;
int ltag, rtag;
}ThreadNode,*ThreadTree;
void creatInThread(ThreadTree T) {
pre = NULL;
if (T != NULL) {
InThread(T);
if (pre->rchild == NULL)
pre->tag = 1;
}
}
void InThread(ThreadTree T) {
if (T != NULL) {
InThread(T->lchild);
visit(T);
InThread(T->rchild);
}
}
void visit(ThreadNode* q) {
if (q->lchild == NULL) {
q->lchild = pre;
q->ltag = 1;
}
if (pre != NULL && pre->rchild == NULL) {
pre->rchild = q;
pre->rtag = 1;
}
pre = q;
}
注意先序二叉树的线索化需要预防回路
判断if(T->ltag=0)
PreThread(T->lchild);
if(T->ltag=0)
PreThread(T->lchild);