中序线索二叉树的构造
结构体
typedef struct TBTNode{
int data;
int rtag;
int ltag;
TBTNode *rchild;
TBTNode *lchild;
};
核心代码
/线索二叉树的中序遍历 递归
void inThread(TBTNode *p,TBTNode *&pre){
if(p!=NULL){
inThread(p->lchild,pre);
if(p->lchild==NULL){
p->lchild=pre;
p->ltag=1;
}
if(pre!=NULL&&pre->rchild==NULL){
pre->rchild=p;
pre->rtag=1;
}
pre=p;
inThread(p->rchild,pre);
}
}
//线索二叉树的先序遍历 递归
void preThread(TBTNode *p,TBTNode *&pre){
if(p!=NULL){
if(p->lchild==NULL){
p->lchild=pre;
p->ltag=1;
}
if(pre!=NULL&&pre->rchild==NULL){
pre->rchild=p;
pre->rtag=1;
}
pre=p;
if(p->ltag==0) //进行判断防止构造线索绕环
inThread(p->lchild,pre);
if(p->rtag==0)
inThread(p->rchild,pre);
}
}
//线索二叉树的后序遍历 递归
void postThread(TBTNode *p,TBTNode *&pre){
if(p!=NULL){
inThread(p->lchild,pre);
inThread(p->rchild,pre);
if(p->lchild==NULL){
p->lchild=pre;
p->ltag=1;
}
if(pre!=NULL&&pre->rchild==NULL){
pre->rchild=p;
pre->rtag=1;
}
pre=p;
}
}