调试发现左子树遍历完后程序还会读取空指针给上一级调用,导致遍历失败,原因?

#include<stdio.h>
#include<stdlib.h>
typedef struct BiTNode                     //结点结构 
{
	char data;                             //结点数据 
	struct BiTNode *lchild,*rchild;        //左右孩子指针 
}BiTNode,*BiTree;
void CreateBiTree(BiTree *T);              //创建二叉树 
void PreOrderTraverse(BiTree T);           //二叉树前序遍历 
int main(void)
{
	BiTree T;
	
	CreateBiTree(&T);
	puts("Binary Tree creation is complete.");
	puts("Binary tree:");
	PreOrderTraverse(T);
	
	return 0;
}
void CreateBiTree(BiTree *T)
{
	char input;
	
	scanf("%c",&input);
	if(input=='#')
		T=NULL;
	else
	{
		(*T)=(BiTree)malloc(sizeof(BiTNode));
		(*T)->data=input;
		CreateBiTree(&(*T)->lchild);        //构造左子树 
		CreateBiTree(&(*T)->rchild);        //构造右子树  
	}
}
void PreOrderTraverse(BiTree T)
{
	if(T==NULL)
		return;
	printf("%c  ",T->data);                //显示结点数据,可以更改为其它操作 
	PreOrderTraverse(T->lchild);           //再先序遍历左子树 
	PreOrderTraverse(T->rchild);           //最后先序遍历右子树 
}

 

哎,自己傻了,创建的时候应该用*T=NULL,而不是T=NULL。