Довольно плохая практика - использовать одинаковые имена для типов данных и имен объектов.
struct structnode
{
int data;
struct structnode *left;
struct structnode *right;
};
struct structnode* newNode(int data)
{
struct structnode* node = (struct node*)malloc(sizeof(struct node));
node->data = data;
node->left = NULL;
node->right = NULL;
return(node);
}
int main()
{
struct structnode *root = newNode(1);
root->left = newNode(2);
root->right = newNode(3);
root->left->left = newNode(4);
getchar();
return 0;
}
И теперь неразбериха исчезла.