//创建线索二叉树并遍历
#include<stdio.h>
#include<stdlib.h>
//线索存储标志位
//Link(0),表示指向左右孩子的指针
//Thread(1),表示指向该结点的前驱后继
typedef enum{Link,Thread}PointerNag;
typedef char ElemType;
//创造线索二叉树的结构
typedef struct BiThrNode {
char data;
struct BiThrNode *lchild,*rchild;
PointerNag ltag;
PointerNag rtag;
}BiThrNode,*BiThrTree;
//全局变量,始终指向刚刚访问过的结点
BiThrTree pre;
//构建线索二叉树
CreateBiThrTree(BiThrTree* T) {
char c;
scanf("%c", &c);
if (' ' == c) {
*T = NULL;
}
else {
(*T) = (BiThrNode*)malloc(sizeof(BiThrNode));
(*T)->data = c;
(*T)->ltag = Link;
(*T)->rtag = Link;
CreateBiThrTree(&(*T)->lchild);
CreateBiThrTree(&(*T)->rchild);
}
}
//中序遍历线索化
InThreading(BiThrTree T) {
if (T) {
InThreading(T->lchild);
if (!T->lchild) {
T->ltag = Thread;
T->lchild = pre;
}
if (!pre->rchild) {
pre->rtag = Thread;
pre->rchild = T;
}
pre = T;
InThreading(T->rchild);
}
}
//为pre创造初始化条件
InOrderThreading(BiThrTree* p,BiThrTree T) {
*p = (BiThrTree)malloc(sizeof(BiThrNode));
(*p)->ltag = Link;
(*p)->rtag = Thread;
(*p)->rchild = *p;
if (!T) {
(*p)->lchild = *p;
}
else {
(*p)->lchild = T;
pre = *p;
InThreading(T);
pre->rtag = Thread;
pre->rchild = *p;
(*p)->rchild = pre;
}
}
int main(void) {
BiThrTree T = NULL;
CreateBiThrTree(&T);
InOrderThreading(&T, T);
return 0;
}
数据结构之创建线索二叉树并打印
最新推荐文章于 2022-11-19 17:53:05 发布