'Pass pointer of struct with recursive function

I'm just trying to pass my struct in recursive function, but in the function when I will pass it again it will be the argument of my struct. I could get the right value but I get the error "passing argument 1 of 'search' from incompatible pointer type [-Wincompatible-pointer-types]gcc "

typedef struct node_t
{
int keyVal;
struct node_t *leftNode;
struct node_t *rightNode;
struct node_t *parent;
}Node;

typedef struct tree_t
{
 struct node_t *root;
}List;



Node *search( List *temp, int value)
    {  
        Node *curr=temp->root;
       if (curr == NULL || curr->keyVal == value)
           return curr;
        if (curr->keyVal < value)


      return search(&(curr->leftNode), value); //here I'm getting a warning
                     ^^^ 
    return search(&(curr->leftNode), value); //the same here 
}                ^^^ 


Solution 1:[1]

Node *search( List *temp, int value) This takes a List aka tree_t as the first argument.

In return search(&(curr->leftNode), value); the curr->leftNode is a Node aka node_t. This is different type and the compiler is correct to complain about incompatible pointer type.

A possible fix would be to change the function signature to Node * search( Node * curr, int value) and remove Node *curr=temp->root;. Do the first call initiating the search as search(x->root, xxx); with your List. The recursive calls would then be correct.

Sources

This article follows the attribution requirements of Stack Overflow and is licensed under CC BY-SA 3.0.

Source: Stack Overflow

Solution Source
Solution 1