2013-01-06 51 views
0

我有我用來實現BinarySearchTree的下面的代碼。不知何故,它不會構建二叉樹。任何人都可以幫助解決問題。使用單鏈表實現BinarySearchTree

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

您是否試過在調試器中單步執行代碼?一行一行地執行,同時檢查變量和指針。 –

+0

您應該創建一個單獨的函數來創建和返回節點,另一個添加節點(以及根節點)。因此,您將能夠避免出現此問題,正如CubeSchrauber所述。 – asheeshr

回答

1

您不應該使用BST *ptr作爲addnode的參數。您嘗試爲其分配一個值,但此時ptr是函數addnode的局部變量,並不會更改父節點的預期左指針或右指針。

試着想想使用BST ** ptr代替。

+0

有沒有一種方法可以在不使用指針指針的情況下實現相同的功能? – krrishna

+0

@krrishna您應該創建一個獨立的函數來創建和返回節點,另一個添加節點(以及根節點)。 – asheeshr