这个程序里函数:void InOrderThreading(BiThrTree *Thrt,BiThrTree T)中的
  (*Thrt) = (BiThrTree)malloc(sizeof(BiThrNode));出错,
  错误信息为:error C2065: 'Thrt' : undeclared identifier
  
源代码如下:
[code=c]
#include<stdio.h>
#include<stdlib.h>

#define OK         1
#define ERROR      0
#define OVERFLOW   -1
#define TRUE       1
#define FALSE       0


typedef char TElemType;

/** 二叉树的二叉线索存储表示 */
typedef enum{Link,Thread} PointerTag; /* Link(0):指针,Thread(1):线索**/
typedef struct BiThrNode
{
    TElemType data;
    struct BiThrNode *lchild,*rchild;
    PointerTag LTag,RTag;
}BiThrNode,*BiThrTree;

BiThrTree pre; /** 全局变量,始终指向刚刚访问的结点*/

/** 二叉树的二叉线索存储的基本操作 */
void CreatBiThrTree(BiThrTree *T)
{
    /*按先序输入线索二叉树中的结点的值,构造二叉树-**/
    TElemType ch;
    ch = getchar();   //获取从键盘输入的字符
    getchar();         //消除键盘回车屏蔽
    if(ch == '#')
        *T = NULL;
    else
    {
        *T = (BiThrTree)malloc(sizeof(BiThrNode)); /** 生成根节点(先序)*/
        if(!*T)
            exit(OVERFLOW);    //内存分配失败
        (*T)->data = ch;  //根节点赋值

        CreatBiThrTree(&(*T)->lchild); //递归构造左子树
        if((*T)->lchild)  //有左孩子
            (*T)->LTag = Link;  //给左标志赋值(指针)

        CreatBiThrTree(&(*T)->rchild); //递归构造右子树
        if((*T)->rchild)  //有右孩子
            (*T)->RTag = Link;  //给右标志赋值(指针)
    }
}


void InThreading(BiThrTree p)
{ /** 通过中序遍历进行中序线索化,线索化之后pre指向最后一个结点*/
    if(p)
    {
        InThreading(p->lchild); /* 递归左子树线索化 */
        
        if(!p->lchild)   /* 没有左孩子*/
        {
            p->LTag = Thread;  /** 左标志为线索(前驱)*/
            p->lchild = pre;   /** 左孩子指针指向前驱 */
        }

        if(!pre->rchild)  /**前驱没有右孩子*/
        {
            pre->RTag = Thread;  /** 前驱的右标志为线索 */
            pre->rchild = p;     /** 前驱右孩子指针指向其后继(当前结点p)*/
        }

        pre = p;  /** 保持pre指向p的前驱*/

        InThreading(p->rchild);  /**递归右子树线索化*/
    }

}

void InOrderThreading(BiThrTree *Thrt,BiThrTree T)
{
    /** 中序遍历二叉树T,并将其中序线索化,Thrt指向头结点 */
   *Thrt=(BiThrTree)malloc(sizeof(BiThrNode));
    
    if(!(*Thrt))  /**生成头结点不成功*/
        exit(OVERFLOW);
    (*Thrt)->LTag=Link;   /**建头结点,左标志为指针*/
    (*Thrt)->RTag=Thread; /**右标志为线索*/
    (*Thrt)->rchild=*Thrt; /**右指针回指*/

    if(!T)    /* 若二叉树空,则左指针回指**/
        (*Thrt)->lchild=(*Thrt);
    else
    {
        (*Thrt)->lchild=T; /**头结点的指针指向根结点*/
        pre=(*Thrt);         /** pre(前驱)的初值指向头结点*/
        InThreading(T);     /** 中序遍历進行中序线索化,pre指向中序遍历的最後一個结点 */
        pre->rchild=(*Thrt); /**最后一个结点的右指针指向头结点*/
        pre->RTag=Thread;  /**最后一个结点的右标志为线索*/
        (*Thrt)->rchild=pre; /**头结点的右指针指向中序遍历的最后一个结点*/

    }

}
void main()
{
    BiThrTree T,Thrt;
    CreatBiThrTree(&T);
    InOrderThreading(&Thrt,T);



}

[/code]