线索二叉树的基本操作

(1)二叉树的线索化

(2)对线索二叉树进行中序遍历

#include<iostream>
using namespace std;

typedef char TElemType;
enum Status {OK = 1,ERROR = 0};
enum PointerTag{Link = 0,Thread = 1};

//typedef struct BiTNode {
//  TElemType data;
//  struct BiTNode *lchild, *rchild;
//}BiTNode,*BiTree;


typedef struct BiThrNode {
    TElemType data;
    struct BiThrNode *lchild, *rchild;
    PointerTag LTag, RTag;
}BiThrNode, *BiThrTree;

Status CreateBiTree(BiThrTree &T) {
    char ch;
    scanf("%c", &ch);
    if (ch == ' ')T = NULL;
    else {
        if (!(T = (BiThrNode *)malloc(sizeof(BiThrNode))))exit(OVERFLOW);
        T->RTag = T->LTag = Link;
        T->data = ch;
        CreateBiTree(T->lchild);
        CreateBiTree(T->rchild);
    }
    return OK;
}
BiThrTree 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);
    }
}

Status InOrderThreading(BiThrTree&Thrt, BiThrTree T) {
    if (!(Thrt = (BiThrTree)malloc(sizeof(BiThrNode))))exit(OVERFLOW);
    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;
    }
    return OK;
}

Status InOrderTraverse_Thr(BiThrTree T) {
    BiThrTree p;
    p = T->lchild;
    while (p != T) {
        while (p->LTag == Link)p = p->lchild;
        if (printf("%c ", p->data) <= 0)return ERROR;
        while (p->RTag == Thread&&p->rchild != T) {
            p = p->rchild;
            printf("%c ", p->data);
        }
        p = p->rchild;
    }
    return OK;
}


int main()
{
    BiThrTree T1;
    BiThrTree T2;
    CreateBiTree(T1);
    InOrderThreading(T2,T1);
    InOrderTraverse_Thr(T2);
    return 0;
}

这里写图片描述

猜你喜欢

转载自blog.csdn.net/realfancy/article/details/78824455
今日推荐