代码:
//王道课程内步骤
void findPreOderPreNode(BiTree &t,BiTree &pre){
//基础代码与中序遍历二叉树相同
if (t != NULL){
findPreOderPreNode(t -> lchild,pre);
visit(t,pre);
findPreOderPreNode(t -> rchild,pre);
}
}
//线索化步骤
void visit(BiTree &t,BiTree &pre){
//左孩子为空,将指针指向上一个前序结点
if (t -> lchild == NULL){
t -> lchild = pre;
t ->ltag = 1;
}
//如果前序结点的右孩子指针为空,将前序结点的右指针指向当前结点
//此时注意考虑前序结点为空(第一个结点)
if (pre != NULL && pre ->rchild == NULL) {
pre->rchild = t;
pre->rtag = 1;
}
pre = t;//,将前序指针后移,进行下一次线索化
}
//书内代码仅将visit函数内的代码复制到visit处即可。
- 蓝色为线索化的指针指向
- 绿色为结点
- 红色为树的原分支