自己编的建立二叉树出错了,求大神指导

最近在学二叉树的建立,自己尝试着编了一个二叉树,然而在运行时出错了,程序自动关闭。不知道问题出在哪,求大神指导

#include
#include
typedef struct tnode Tnode;
struct tnode
{
Tnode *left;
Tnode *right;
int data;
};
Tnode *new_tnode(int data)
{
Tnode *new = malloc(sizeof(Tnode));
new->left=NULL;
new->right=NULL;
new->data=data;
return new;
}
void insert(Tnode *root,Tnode *tree)
{
if(root==NULL)
{
tree=root;
return;
}
if(root->datadata)
{
insert(root,tree->left);
}
else if(root->data>tree->data)
{
insert(root,tree->right);
}
}
void printout(Tnode *tree)
{
if(tree->left)
{
printout(tree->left);
}
printf("%d",tree->data);
if(tree->right)
{
printout(tree->right);
}
}
int main()
{
Tnode *tree=NULL;
int i;
int data;
for(i=0;i<10;i++)
{
scanf("%d",data);
insert(new_tnode(data),tree);
}

return 0;

}

LZ写的好多错误,我给你个我写的吧
输入例子1 2 3 4 5 0 0 0 0 0 0 创建了5个节点

#include

typedef struct Node {
int data;
struct Node* lchild;
struct Node* rchild;
}Node;

void createTree(Node** tree)
{
int data;
Node* node;
scanf("%d",&data);
(*tree)->data = data;
if (data == 0) {
(*tree)->lchild = NULL;
(*tree)->rchild = NULL;
return ;
}
node = (Node*)malloc(sizeof(Node));
(*tree)->lchild = node;
node = (Node*)malloc(sizeof(Node));
(*tree)->rchild = node;
createTree(&((*tree)->lchild));
createTree(&((*tree)->rchild));
}

void printTree(Node* tree)
{
if (tree == NULL)
return ;
printf("%d ",tree->data);
printTree(tree->lchild);
printTree(tree->rchild);
}

int main()
{
Node tree = (Node)malloc(sizeof(Node));
createTree(&tree);
printTree(tree);
return 0;
}