2013-01-06 5 views
0

J'ai le code ci-dessous que j'utilise pour implémenter BinarySearchTree. D'une certaine manière, il ne construit pas le binarytree. Est-ce que quelqu'un peut aider quel est le problème?Implémentation de BinarySearchTree à l'aide d'une seule liste chaînée

typedef struct BinarySearchTree 

{ 

    struct BinarySearchTree *left; 
    int nodeval; 
    struct BinarySearchTree *right; 

} 
BST; 

BST *root=NULL; 

void addrootnode(BST *,int); 

void addnode(BST *,int); 

void deletenode(int); 

void printnodes(); 

main() 

{ 

    int nodeval; 
    char choice; 
    printf("\n r->rootnode \n a->add \n d->delete \n p->print \n e->exit\n"); 
    while (1) 
    { 
     printf("\nEnter your choice:"); 
     scanf("%c",&choice); 
     switch (choice) 
     { 
     case 'r': 
      printf("\nEnter the root node value to add: "); 
      scanf("%d",&nodeval); 
      addrootnode(root,nodeval); 
      break; 
     case 'a': 
      printf("\nEnter the node value to add: "); 
      scanf("%d",&nodeval); 
      addnode(root,nodeval); 
      break; 
     case 'd': 
      printf("\nEnter the node value to delete: "); 
      scanf("%d",&nodeval); 
      break; 
     case 'p': 
      //printf("\n"); 
      printnodes(root); 
      break; 
     case 'e':   
      exit(0); 
     default: 
      break; 
     } 
    } 
    getchar(); 

}//end of main 

//addrootnode 

void addrootnode(BST *ptr,int num) 

{ 

    if(ptr==NULL) 
    { 
     ptr=(BST *) malloc(sizeof(BST)); 
     ptr->left=NULL; 
     ptr->nodeval=num; 
     ptr->right=NULL;   
     root=ptr;  
    } 
} 
//add node 

void addnode(BST *ptr,int num) 
{ 

    if(ptr==NULL) 
    { 
     ptr=(BST *) malloc(sizeof(BST)); 
     ptr->left=NULL; 
     ptr->nodeval=num; 
     ptr->right=NULL;   


    } 
    else if(num < ptr->nodeval) 
    {  
     addnode(ptr->left,num); 
    } 
    else 
    { 

     addnode(ptr->right,num); 
    } 

} 

//delete functionality 

void deletenode(int nodeval) 
{ 
} 

//print all nodes 

void printnodes(BST *ptr) 

{ 

    if (ptr) 

    { 
     printnodes(ptr->left); 
     printf("%d\t",ptr->nodeval); 
     printnodes(ptr->right); 
    } 

} 
+0

Avez-vous essayé de parcourir le code dans un débogueur? Faites-le, ligne par ligne, tout en vérifiant les variables et les pointeurs. –

+0

Vous devez créer une fonction distincte qui crée et renvoie un noeud, et une autre qui ajoute des noeuds (ainsi que le noeud racine). Ainsi, vous pourrez éviter d'avoir ce problème, comme mentionné par CubeSchrauber. – asheeshr

Répondre

1

Vous ne devez pas utiliser BST *ptr en tant qu'argument de l'addnode. Vous essayez de lui affecter une valeur, mais pour le moment ptr est une variable locale à la fonction addnode et ne modifie pas le pointeur gauche ou droit voulu du nœud parent.

Essayez d'utiliser BST ** ptr à la place.

+0

est là un moyen que je peux implémenter la même chose sans utiliser un pointeur sur le pointeur. – krrishna

+0

@krrishna Vous devez créer une fonction séparée qui crée et renvoie des nœuds, et une autre qui ajoute des nœuds (ainsi que le nœud racine). – asheeshr

Questions connexes