C语言定义一个结构体指针*Tree,然后Tree定义函数怎么理解

typedef struct node{
    char data;
    struct node *left;
    struct node *right;
}Node, *Tree;//Node为别名,*Tree为结构体指针

Tree create_tree(){
    Node *root = NULL;//root指针指向Node型变量,变量的值为NULL
    char ch;
    scanf("%c", &ch); // 输入 ABD##E##C##

    if (ch != '#'){
        //(Node*为强制类型转换)
        root = (Node*)malloc(sizeof(Node));//开辟动态存储区,将地址转换为Node*类型,后放在root中
        root->data = ch;//将获取输入的数据ch赋给root中的data字符型变量

        root->left = create_tree(); // 递归创建
        root->right = create_tree();
    }
    else{
        root = NULL;
    }

    return root;
}

这里的Tree不是指针吗?为什么Tree能够直接定义函数create_tree()?Tree去掉" * "之后代表的是什么?

你将第七行的Tree换成Node ,程序也不会报错。
经过查询得知,
Tree其实是typedef node* Tree,也就是说你为结构体的指针定义了一个别名,而这个指针的别名为Tree,而并不是定义了一个结构体指针。定义结构体指针应该另起一行,不能在typedef里进行定义。