Im working on a program in C that reads a binary tree from a file and opperates functions on it:insert elements,delete elements,search elements,display elements
With my old debugger it seems that i have 4 warnings and i dont know kow to fix them
Here is the code
#include<stdio.h>
#include<stdlib.h>
#include<stdbool.h>
typedef struct bst
{
    double number;
    struct bst *leftChild;
    struct bst *rightChild;
} node;
node *root = NULL;
void insertNode(double value);
void preOrderPrint(node *root);
node * findMinimum(node *root);
node * deleteNode(node *root, double value);
node* search(node ** tree, double val);
int main()
{
    char line[255];
    char* endptr;
    FILE* f = fopen("tree.txt", "r");
    while (fgets(line, sizeof(line), f))
    {
        if  (*line!='*')
        {
                if(strtod (line, &endptr))
                    insertNode(strtod (line, &endptr));
                    else if (strtoimax(line,&endptr,0))
                    insertNode((strtoimax(line,&endptr,0)));
                    else
                    insertNode( strtol (line, &endptr,0));
        }
    }
    fclose(f);
    int flag = 0, key;
    int choice = 0;
    do
        {
        printf("\nEnter your choice:\n1. Display tree\n2. Insert node\n3. Delete node\n4. Exit\nChoice: ");
        scanf("%d", &choice);
            switch(choice)
            {
            case 1:
                printf("In Order Display\n");
                preOrderPrint(root);
            break;
            case 2:
            printf("Enter key to insert: ");
            scanf("%d",&key);
            flag = search(&root,key);
            if (flag)
                {
                printf("Key found in tree,cannot insert\n");
                }
                else
                {
                printf("Node %d was inserted \n",key);
                insertNode(key);
                preOrderPrint(root);
                }
            break;
            case 3:
            printf("Enter key to delete: ");
            scanf("%d", (int*)&key);
            flag = search(&root, key);
            if (!flag)
                {
                printf("Key not found in tree,cannot delete\n");
                }
                else
                {
                printf("Node %d was deleted \n",key);
                deleteNode(root,key);
                preOrderPrint(root);
                }
            break;
            case 4:
            printf("Memory Cleared\nPROGRAM TERMINATED\n");
            break;
            default: printf("Not a valid input, try again\n");
            }
        }
 while (choice != 5);
    return 0;
}
node * deleteNode(node *currentNode, double value)
{
    if(currentNode==NULL) // empty tree
        return NULL;
    else if(value < currentNode->number) // value is less than node's number. so go to left subtree
        currentNode->leftChild = deleteNode(currentNode->leftChild, value);
    else if(value > currentNode->number) // value is greater than node's number. so go to right subtree
        currentNode->rightChild = deleteNode(currentNode->rightChild, value);
    else // node found. Let's delete it!
    {
        //node has no child
        if(currentNode->leftChild == NULL && currentNode->rightChild == NULL)
        {
            currentNode = NULL;
        }
        else if(currentNode->leftChild == NULL) // node has only right child
        {
            currentNode = currentNode->rightChild;
        }
        else if(currentNode->rightChild == NULL) // node has only left child
        {
            currentNode = currentNode->leftChild;
        }
        else // node has two children
        {
            node *tempNode = findMinimum(currentNode->rightChild);
            currentNode->number = tempNode->number;
            currentNode->rightChild = deleteNode(currentNode->rightChild, tempNode->number);
        }
    }
    return currentNode;
}
node * findMinimum(node *currentNode)
{
    if(currentNode->leftChild==NULL)
        return currentNode;
    return findMinimum(currentNode->leftChild);
}
void insertNode(double value)
{
    node *tempNode;
    node *currentNode;
    node *parentNode;
    tempNode = (node *) malloc(sizeof(node));
    tempNode->number = value;
    tempNode->leftChild = NULL;
    tempNode->rightChild = NULL;
    //For the very first call
    if(root==NULL)
    {
        root = tempNode;
    }
    else
    {
        currentNode = root;
        parentNode = NULL;
        while(1)
        {
            parentNode = currentNode;
            if(value <= parentNode->number)
            {
                currentNode = currentNode->leftChild;
                if(currentNode==NULL)
                {
                    parentNode->leftChild = tempNode;
                    return;
                }
            }
            else
            {
                currentNode = currentNode->rightChild;
                if(currentNode==NULL)
                {
                    parentNode->rightChild = tempNode;
                    return;
                }
            }
        }
    }
}
void preOrderPrint(node *root)
{
    if(root==NULL)
        return;
    preOrderPrint(root->leftChild);
    printf("%g ", root->number);
    preOrderPrint(root->rightChild);
}
node* search(node ** tree, double val)
{
    if(!(*tree))
    {
        return NULL;
    }
    if(val < (*tree)->number)
    {
        search(&((*tree)->leftChild), val);
    }
    else if(val > (*tree)->number)
    {
        search(&((*tree)->rightChild), val);
    }
    else if(val == (*tree)->number)
    {
        return *tree;
    }
    //return true;
}
C:\UsersX\Desktop\39\main.c|32|warning: implicit declaration of function 'strtoimax' [-Wimplicit-function-declaration]|
C:\UsersX\Desktop\39\main.c|56|warning: assignment makes integer from pointer without a cast [-Wint-conversion]|
C:\UsersX\Desktop\39\main.c|72|warning: assignment makes integer from pointer without a cast [-Wint-conversion]|
C:\UsersX\Desktop\39\main.c|224|warning: control reaches end of non-void function [-Wreturn-type]| ||=== Build finished: 0 error(s), 4 warning(s) (0 minute(s), 0 second(s)) ===|
Also the main question would be why i cannot delete the root? With my debugger it seems that the root can be deleted.
 
    