#include"stdio.h"
#include"stdlib.h"
typedef struct node
{
    char data;
    struct node *LChild,*RChild;
    int Ltag,Rtag;
}Bitree;
Bitree *CreatBitree()
{
    Bitree *bt;
    char ch;
    scanf("%c",&ch);
    if(ch=='#')
        bt=NULL;
    else
    {
        bt=(Bitree*)malloc(sizeof(Bitree));
        bt->data=ch;
        bt->LChild=CreatBitree();
        bt->RChild=CreatBitree();
    }
    return bt;
}
void Inthread(Bitree *bt)
{
    Bitree *pre;
    if(bt!=NULL)
    {
        Inthread(bt->LChild);
    
    
        if(bt->LChild==NULL)
        {
           bt->Ltag=1;
           bt->LChild=pre;
        }
    }
    if(pre!=NULL&&pre->RChild==NULL)
    {
        pre->RChild=bt;
    }
    pre=bt;
    Inthread(bt->RChild);
}
void InPS(Bitree *p)
{
    Bitree *pre,*succ,*q;
    
    if(p->Ltag==1)
        pre=p->LChild;
    
    else
        for(q=p->LChild;q->Rtag==0;q=q->RChild)
        {
            pre=q;
            printf("%c",pre);
        }
    if(p->Rtag==1)
            succ=p->RChild;
    
    else
        for(q=p->RChild;p->Ltag==0;q=q->LChild)
        {
            succ=q;
            printf("%c",succ);
        }
}

void visit(Bitree *bt)
{
    printf("%5c",bt->data);
}
void Inorder(Bitree *bt)
{
    if(bt!=NULL)
    {
        Inorder(bt->LChild);
        visit(bt);
        Inorder(bt->RChild);
    }
}

int main()
{
    Bitree *bi;
    printf("please input node:\n");
    bi=CreatBitree();
    printf("\n");
    printf("the inorder of the tree is:\n");
    Inorder(bi);
    printf("\n");
    Inthread(bi);
    InPS(bi);
    printf("\n");
    return 0;
}
这是一个线索二叉树的C语言版的程序,运行没有错,但不能执行,我不会调试,程序的主要问题好象出在Inthread()那个函数里,我把它删除了就没事了,但我写的那个用来找前驱后继结点的那个InPS()函数也好象没有起作用,但我检查了很久都不知道应该怎么改,请各位高手指导小猪一下!多谢!