结点结构:
算法流程:
算法与中序遍历算法类似,只需要将遍历算法中访问结点的操作具体化为建立正在访问的结点与其非空中序前趋结点间线索。
a). 若上次访问到的结点的右指针为空,则将当前访问到的结点序号填入,并置右标志域为 1
b). 若当前访问到的结点的左指针为空,则将上次访问到的及诶单序号填入,并置左标志域为 1
void InThread(Node *p,Node* pre){
if(p){ // p 非空
InThread(p->left,pre);
/*中间是中序遍历的核心处理过程*/
if(p->left==NULL){
p->left=pre;
p->ltag=1;
}
if(pre&&pre->right==NULL){
pre->right=p;
pre->rtag=1;
}
pre=p;
/*中间是中序遍历的核心处理过程*/
InThread(p->right,pre);
}
}