中序线索二叉树的创建与输出

#include<bits/stdc++.h>
typedef struct node
{
    char data;
    int ltag,rtag;
    struct node *lchild,*rchild;
}TBTNode;
TBTNode *pre;
void Greate(TBTNode *&b)
{
    char ch;
    scanf("%c",&ch);
    if(ch=='#') b=NULL;
    else
    {
        b=(TBTNode *)malloc(sizeof(TBTNode));
        b->data=ch;
        Greate(b->lchild);
        Greate(b->rchild);
    }
}
void Thread(TBTNode *&p)
{
    if(p!=NULL) 
    {
        Thread(p->lchild);
        if(p->lchild==NULL)
        {
            p->lchild=pre;
            p->ltag=1;
        }
        else p->ltag=0;
        if(pre->rchild==NULL)
        {
          pre->rchild=p;
          pre->rtag=1;
        }
        else pre->rtag=0;
        pre=p;
        Thread(p->rchild);
    }
}
TBTNode *GreateThread(TBTNode *b)
{
    TBTNode *root;
    root=(TBTNode*)malloc(sizeof(TBTNode));
    root->ltag=0;
    root->rtag=1;
    root->rchild=b;
    if(b==NULL) root->lchild=root;
    else
    {
        root->lchild=b;
        pre=root;
        Thread(b);
        pre->rchild=root;
        pre->rtag=1;
        root->rchild=pre;
    }
    return root;
}
void ThInOrder(TBTNode *tb)
{
    TBTNode *p=tb->lchild;
    while(p!=tb)
    {
        while(p->ltag==0) p=p->lchild;
        printf("%c",p->data);
        while(p->rtag==1 && p->rchild!=tb)
        {
            p=p->rchild;
            printf("%c",p->data);
        }
        p=p->rchild;
    }
}
int main()
{
    TBTNode *b;
    TBTNode *T;
    Greate(b);
    T=GreateThread(b);
    ThInOrder(T);
    return 0;
}

猜你喜欢

转载自blog.csdn.net/2302_77099705/article/details/130912081