mirror of
https://github.com/CodePanda66/CSPostgraduate-408.git
synced 2023-05-21 21:49:33 +08:00
➕ update ThreadBiTress
This commit is contained in:
@@ -29,6 +29,7 @@ void visit(ThreadNode *q) {
|
||||
pre->rchild = q;
|
||||
pre->rtag = 1;
|
||||
}
|
||||
pre = q;
|
||||
}
|
||||
|
||||
//中序遍历二叉树,一边遍历一边线索化
|
||||
@@ -51,6 +52,133 @@ void CreatInThread(ThreadTree T) {
|
||||
}
|
||||
}
|
||||
|
||||
//中序线索化(王道教材版)
|
||||
void InThread_CSKaoYan(ThreadTree p, ThreadTree &pre) {
|
||||
if (p != NULL) {
|
||||
InThread_CSKaoYan(p->lchild, pre);//递归,线索化左子树
|
||||
if (p->lchild == NULL) {//左子树为空,建立前驱线索
|
||||
p->lchild = pre;
|
||||
p->ltag = 1;
|
||||
}
|
||||
if (pre != NULL && pre->rchild == NULL) {
|
||||
pre->rchild == p;//建立前驱结点的后及线索
|
||||
pre->rtag = 1;
|
||||
}
|
||||
pre = p;
|
||||
InThread_CSKaoYan(p->rchild, pre);
|
||||
}
|
||||
}
|
||||
|
||||
//中序线索化二叉树(王道教材版本)
|
||||
void CreatInThread_CSKaoYan(ThreadTree T) {
|
||||
ThreadTree pre = NULL;
|
||||
if (T != NULL) {
|
||||
InThread_CSKaoYan(T, pre);
|
||||
pre->rchild = NULL;//思考:为什么处理最后一个结点时没有判断rchild 是否为NULL?
|
||||
pre->rtag = 1;//答:因为最后一个结点的右孩子必为空。
|
||||
}
|
||||
}
|
||||
|
||||
//先序线索化,一边遍历一边线索化
|
||||
void PreThread(ThreadTree T) {
|
||||
if (T != NULL) {
|
||||
visit(T);
|
||||
if (0 == T->ltag) {//lchild不是前驱线索
|
||||
PreThread(T->lchild);
|
||||
}
|
||||
PreThread(T->rchild);
|
||||
}
|
||||
}
|
||||
|
||||
//创建先序线索化二叉树T
|
||||
void CreatPreThread(ThreadTree T) {
|
||||
pre == NULL;
|
||||
if (T != NULL) {
|
||||
PreThread(T);
|
||||
if (pre->rchild == NULL) {
|
||||
pre->rtag = 1;//处理遍历的最后一个结点
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
//先序线索化(王道教程版本)
|
||||
void PreThread_CSKaoYan(ThreadTree p, ThreadTree &pre) {
|
||||
if (p != NULL) {
|
||||
if (p->lchild == NULL) {
|
||||
p->lchild = pre;
|
||||
p->ltag = 1;
|
||||
}
|
||||
if (pre != NULL && pre->rchild == NULL) {
|
||||
pre->rchild == p;//建立前驱结点的后及线索
|
||||
pre->rtag = 1;
|
||||
}
|
||||
pre = p;
|
||||
if (0 == p->ltag) {
|
||||
PreThread_CSKaoYan(p->lchild, pre);
|
||||
}
|
||||
PreThread_CSKaoYan(p->rchild, pre);
|
||||
}
|
||||
}
|
||||
|
||||
//先序线索化二叉树(王道教材版本)
|
||||
void CreatPreThread_CSKaoYan(ThreadTree T) {
|
||||
ThreadTree pre = NULL;
|
||||
if (T != NULL) {
|
||||
PreThread_CSKaoYan(T, pre);
|
||||
if (pre->rchild = NULL)//处理遍历的最后一个结点
|
||||
pre->rtag = 1;
|
||||
}
|
||||
}
|
||||
|
||||
//后序线索二叉树
|
||||
void PostThread(ThreadTree T) {
|
||||
if (T != NULL) {
|
||||
PostThread(T->lchild);
|
||||
PostThread(T->rchild);
|
||||
visit(T);
|
||||
}
|
||||
}
|
||||
|
||||
//创建后序线索二叉树T
|
||||
void CreatPostThread(ThreadTree T) {
|
||||
pre == NULL;
|
||||
if (T != NULL) {
|
||||
PostThread(T);
|
||||
if (pre->rchild == NULL) {
|
||||
pre->rtag = 1;//处理遍历的最后一个结点
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
//后序线索化(王道教程版本)
|
||||
void PostThread_CSKaoYan(ThreadTree p, ThreadTree &pre) {
|
||||
if (p != NULL) {
|
||||
PostThread_CSKaoYan(p->lchild, pre);
|
||||
PostThread_CSKaoYan(p->rchild, pre);
|
||||
if (p->lchild == NULL) {
|
||||
p->lchild = pre;
|
||||
p->ltag = 1;
|
||||
}
|
||||
if (pre != NULL && pre->rchild == NULL) {
|
||||
pre->rchild == p;//建立前驱结点的后及线索
|
||||
pre->rtag = 1;
|
||||
}
|
||||
pre = p;
|
||||
}
|
||||
}
|
||||
//后序线索化二叉树(王道教材版本)
|
||||
void CreatPostThread_CSKaoYan(ThreadTree T) {
|
||||
ThreadTree pre = NULL;
|
||||
if (T != NULL) {
|
||||
PostThread_CSKaoYan(T, pre);
|
||||
if (pre->rchild = NULL)//处理遍历的最后一个结点
|
||||
pre->rtag = 1;
|
||||
}
|
||||
}
|
||||
|
||||
//
|
||||
|
||||
|
||||
/**实现模块**/
|
||||
//坐等填坑
|
||||
|
||||
|
||||
Reference in New Issue
Block a user