threadingtree.c
来自「这是我的一些数据结构(C语言)源代码 比如LinkList」· C语言 代码 · 共 53 行
C
53 行
/*------------- 二叉树的二叉线索存储表示------------*/
typedef enum PointerTag{ Link, Thread };
typedef int TElemType;
typedef struct BiThrNode{
TElemType data;
struct BiThrNode *lchild, *rchild; /*左右孩子*/
PointerTag LTag, RTag; /*左右标志*/
}BiThrNode, *BiThrTree;
/*------------------基本操作的实现-----------------*/
void InOrder_Thr(BiThrTree T, void (* Visit)(TElemType e) ){
BiThrTree p = T->lchild;
while(p != T){
while(p->LTag == Link) p = p->lchild;
Visit(p->data);
while(p->RTag == Thread && p->rchild != T){
p = p->rchild;
Visit(p->data);
}
p = p->rchild;
}
}
void InOrderThreading(BiThrTree *Thrt, BiThrTree T){
Thrt = (BiThrTree)malloc(sizeof(BiThrNode));
Thrt->LTag = Link; Thrt->RTag = Thread;
Thrt->rchild = Thrt;
if(!T) Thrt->lchild = Thrt;
else{
Thrt->lchild = T; pre = Thrt;
InThreading(T);
pre->rchild = Thrt; pre->RTag = Thread;
Thrt->rchild = pre;
}
}
void InThreading(BiThrTree p){
if(p){
InThreading(p->lchild);
if(!p->lchild){
p->LTag = Thread;
p->lchild = pre;
}
if(!pre->rchild){
pre->RTag = Thread;
pre->rchild = p;
}
pre = p;
InThreading(p->rchild);
}
}
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?