2013-01-06 3 views
0

BinarySearchTree 구현하려면 아래 코드가 있습니다. 어떻게 든 그것은 binarytree.Can 빌드하지 않는 사람이 무슨 문제가 도움이 될 수 있습니까?단일 링크 된 목록을 사용하여 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

addnode에 인수로 BST *ptr을 사용하지 않아야합니다. 값을 할당하려고 시도하지만이 때 ptr은 addnode 함수에 대한 로컬 변수이며 부모 노드의 의도 된 왼쪽 또는 오른쪽 포인터를 변경하지 않습니다.

대신 BST ** ptr 사용에 대해 생각해보십시오.

+0

거기 포인터를 사용하지 않고 동일한 구현할 수있는 방법입니다.? – krrishna

+0

@krrishna 노드를 만들고 반환하는 별도의 함수를 만들고 노드를 추가하는 다른 함수 (루트 노드는 물론)를 만들어야합니다. – asheeshr

관련 문제