Согласно стандарту C (6.5.9 Операторы равенства) относительно сравнений указателей и целых чисел там написано
2 Должно выполняться одно из следующих значений:
- оба операнда имеют тип арифметики c;
- оба операнда являются указателями на квалифицированные или неквалифицированные версии совместимых типов;
- один операнд является указателем на тип объекта, а другой - указатель на квалифицированную или неквалифицированную версию void; или
- один операнд является указателем, а другой - константой нулевого указателя.
Таким образом, вы не можете сравнивать указатель и целое число без приведения.
Но в любом случае нет необходимости возвращать целое число в том случае, если выделение памяти не удастся. В таком случае достаточно вернуть NULL.
Таким образом, функция может выглядеть следующим образом:
node * create_node(void)
{
node *newnode = malloc( sizeof( node ) );
if ( newnode != NULL )
{
newnode->right = NULL;
newnode->left = NULL;
}
return newnode;
}
Таким образом, в main вы можете написать, например,
node *root = create_node();
if ( root == NULL ) {
printf("Memory not available to create a node\n");
return 0;
}
без получение сообщения об ошибке компилятора.