В определении структуры отсутствует имя типа, которое вы будете использовать дальше.Когда вы объявляете левое и правое поле, компилятор не знает, что такое узел структуры.Вы должны объявить, что ваша структура является узлом.Это подразумевает изменение псевдонима typedef.См. Исправление здесь и далее, это прекрасно компилируется:
#include <stdio.h>
#include <stdlib.h>
typedef struct node
{
int value;
struct node * left;
struct node * right;
} Node;
int main() {
Node* root,*temp;
root = (Node*) malloc(sizeof(Node));
root->value = 10;
(root->left)= (Node*) malloc(sizeof(Node));
(root->right)=(Node*) malloc(sizeof(Node));
((root->left)->value) =20; /* no more errors */
return 0;
}