Trees kodum çalışmıyor

arkadaşlar merhaba.Kodumda ağaca ekleme,silme,inorder sıralama,yükseklik bulma,full binary olup olmadığını bulma işlemlerini yaptım ama çalışmıyot inorderda sonsuz döngüye giriyor bakarsanız çok sevinirim.

#include <stdio.h>
#include <stdlib.h>
#include <stdbool.h>

struct node{
int data;
struct node *left;
struct node *right;
};

struct node *root = NULL;

struct node *newN(int value){
    struct node* temp=( struct node*)malloc(sizeof(struct node));
    temp-> data= value;
    temp->left=NULL;
    temp->right=NULL;

    if(root==NULL)
    {
        root =temp;
        return temp;
    }
};

void inorder(struct node *root)
{
    if(root!=NULL)
    {
        inorder(root->left);
        printf("%d",root->data);
        inorder(root->right);
    }
}

struct node* ekle(struct node* node,int value){
    if(node==NULL)
        return newN (value);
    if(value < node->data)
        node->left = ekle(node->left,value);
    else if(value > node->data)
        node->right = ekle(node->right,value);
        return  node;
};
int height (struct node *node){
if (node==NULL){
    return 0;
}
    else{
    int lheight,rheight;
    lheight=height(node->left);
    rheight=height(node->right);

    if(rheight>lheight)
        return rheight+1;
    else
        return lheight+1;
}
}
int max(struct node* node){
while(node->right!=NULL)
    node=node->right;
    return node->data;
}

int min(struct node* node){
while(node->left!=NULL)
    node=node->left;
    return node->data;
}

struct node* sil(struct node* node,int x)
{
if(node==NULL)
   return NULL;
if(node->data==x)   { //deger bulundu
   if(node->left==NULL && node->right==NULL)  //bulunan degerin sag ve solu NULL
       return NULL;
   if(node->right!=NULL){ // deger bulundu ve sag tarafı NULL degil
       node->data=min(node->right); //sagdaki en küçük değeri al
    node->right=sil(node->right,min(node->right));
    return node;
   }
 node->data=max(node->left); // deger bulundu ve sol taraf NULL degil
 node->left=sil(node->left,max(node->left)); //soldaki en büyük degeri al
 return node;
 }
 if(node->data<x) //Deger henüz bulunmadı, x degeri küçükse sol ağacta ara
 {
  node->right=sil(node->right,x);
  return node;
 }
 node->left=sil(node->left,x); //deger henüz bulunmadı, x degeri büyükse sağ agacta ara
 return node;
}

bool isFullBinaryTree(struct node *node) {

  if (node == NULL)
    return true;

  // Checking the presence of children
  if (node->left == NULL && node->right == NULL)
    return true;

  if ((node->left) && (node->right))
    return (isFullBinaryTree(node->left) && isFullBinaryTree(node->right));

  return false;
}
int main()
{
int secim;
 while(1==1)
{
    printf("\n1 Sayi Ekle");
    printf("\n2 Sayi Sil");
    printf("\n3 Inorder Siralama");
    printf("\n4 Agacin Yuksekligini Bulma");
    printf("\n5Full Binary Mi");
    printf("\n6 Complete Binary Mi");
    printf("\nsecim yapiniz:");
    scanf("%d",&secim);

    switch(secim)
    {
        case 1 :

        printf("Sayiyi Giriniz");
        scanf("%d",&secim);
        ekle(root,secim);
        break;
    case 2:
        printf("\n Silinecek Sayıyı Giriniz" );
        scanf("%d",&secim);
        sil(root,secim);
        break;
    case 3:
        inorder(root);
        break;
    case 4:
        height(root);
        break;
    case 5:
       isFullBinaryTree(root);
        break;


    }
}
}

bkz: Soru Sorarken Sıkça Düşülen Hatalar #1

Su haliyle newN taraflarindaki pointer’lar objeye donustugu icin hata veriyor.