在二叉树的结点上加上线索的二叉树称为线索二叉树,对二叉树以某种遍历方式(如先序、中序、后序或层次等)进行遍历,使其变为线索二叉树的过程称为对二叉树进行线索化。
一、c语言实现先序线索、中序线索、后续线索二叉树
代码如下(示例):
#include <stdio.h>
#include <stdlib.h>
typedef struct BiTNode {
int data;
BiTNode* lchild, * rchild;
int ltag=0, rtag=0;
}BiTNode,*BiTree;
BiTree pre = NULL;//全局变量
void visit(BiTree P) {
if (P->lchild == NULL) {
P->lchild = pre;
P->ltag=1;
}
if (pre != NULL && pre->rchild == NULL) {
pre->rchild = P;
pre->rtag = 1;
}
if(P!=NULL) printf("%d\n", P->data);
if (P == NULL) printf("no rchild");
pre = P;
}
//中序线索二叉树,一边遍历一边线索化
void MBuild(BiTree P) {
if(P!=NULL){
MBuild(P->lchild);
visit(P);
MBuild(P->rchild);
}
}
//中序线索树节点p的前驱节点
BiTree MPreNode(BiTree p) {
if (p->ltag == 1) p = p->