先序创建线索二叉树遇到错误

#include<stdio.h>
#include<stdlib.h>
#include<stdbool.h>

typedef enum pointertag{link,thread} pointertag;				
typedef char Elemtype;
typedef struct ThreadNode{
	Elemtype data;
	struct ThreadNode *lchild,*rchild;
	pointertag ltag,rtag;
}ThreadNode,*ThreadTree;

ThreadTree InitpreThreadTree(ThreadTree *p){			
	char ch;
	scanf("%c",&ch);
	if(ch=='#'){
		(*p)=NULL;
	}
	else{
		(*p)=(ThreadNode*)malloc(sizeof(ThreadNode));
		(*p)->ltag = link;
		(*p)->rtag = link;					
		(*p)->data =ch;
		(*p)->lchild = InitpreThreadTree((*p)->lchild);
		(*p)->rchild = InitpreThreadTree((*p)->rchild); 
	}
	return (*p);
} 

void main()
{
	ThreadTree T;
	InitpreThreadTree(&T);
} 

这里说期待我用 指向结点的指针的指针 而不是 结点的指针 但是我这里用ThreadTree *p 明明就是指向结点的指针的指针

麻烦大佬给我解答一下 

(*p)->rchild的类型是struct ThreadNode *lchild,*rchild;

ThreadTree InitpreThreadTree(ThreadTree *p)返回值的类型是TreadTree

我觉得应该是有问题的,我也是新手不太清楚

看起来像是
InitpreThreadTree(&T);

这句中的输入问题