2012-08-26 2 views
0

나는 책을 따라 가면서 Problem Solving & C에서 프로그램 디자인을 배웁니다.이 책에서 이진 검색 트리를 만들기 위해 필요한 모든 부품을 제공했습니다 .... 하지만 , 내 구현이 작동하지 않았다. 삽입 부분이 있습니다.이진 검색 트리 삽입이 작동하지 않습니다.

void 
add_to_t(tree_node_t *oldTreep, // input/output - binary search tree 
     tree_element_t ele)  // input - element to add 
{ 
    oldTreep = tree_insert(oldTreep, ele); 
} 
tree_node_t * tree_insert(tree_node_t *oldTreep, tree_element_t ele) 
{ 
    if(oldTreep == NULL){ 
     oldTreep = TYPED_ALLOC(tree_node_t); 
     strcpy(oldTreep->element.name, ele.name); 
     strcpy(oldTreep->element.sName, ele.sName); 
     oldTreep->element.seatClass = ele.seatClass; 
     oldTreep->leftp = NULL; 
     oldTreep->rightp = NULL; 
    } 
    else if (strcmp(oldTreep->element.name, ele.name)==0){ 
     /* duplicate key - no insertion */ 
    } 
    else if (strcmp(oldTreep->element.name, ele.name)>0){ 
     oldTreep->rightp = tree_insert(oldTreep->rightp, ele); 
    } 
    else 
    { 
     oldTreep->leftp = tree_insert(oldTreep->leftp, ele); 
    } 
    return(oldTreep); 

} 

내 scan_passenger의 funvtion (I이 함수 호출의 결과에서 전자 업계를 전달하고있다);

void scan_passenger(tree_element_t *pass) 
{ 
    char passName[10], passSname[10]; 
    int classNum; 
    printf("\nEnter the Name of passenger to add the binary search tree> "); 
    scanf("%s", passName); 
    printf("Enter the Surname of passenger to add the binary search tree> "); 
    scanf("%s", passSname); 
    printf("Enter the class number of passenger to add the binary search tree> "); 
    scanf("%d", &classNum); 
    strcpy(pass->name, passName); 
    strcpy(pass->sName, passSname); 
    pass->seatClass = classNum; 
} 

내 typdefs 및 헤더가 필요하면;

#include "stdio.h" 
#include "stdlib.h" 
#include "string.h" 
#define TYPED_ALLOC(type) (type *)malloc(sizeof (type)) 
typedef struct tree_element_s { 
    char name[10]; 
    char sName[10]; 
    int seatClass; 
}tree_element_t; 

typedef struct tree_node_s { 
    tree_element_t element; 
    struct tree_node_s *leftp, *rightp; 
}tree_node_t; 

내 문제는 이진 검색 트리의 루트를 생성하지 않습니다. 힙에 새 요소를 추가하려고하면 새 노드가 만들어집니다. 내 코드를 추적하면이 함수의 모든 인스턴스가 NULL을 반환하는 것 같습니다. 나는 tree_insert를 호출 할 때마다 말할려고합니다. 첫 문장이됩니다. (루트가 NULL이라고 생각합니다) ... 나쁜 영어로 죄송합니다. 그리고 나는 코딩 용어에 대해 이야기 할 때 실수를했을 수도 있습니다. (아마도 1 년이 지난 후 그 책에서 C 연구로 돌아 왔기 때문입니다. 그래서 저는 그것들을 혼합 할 수 있습니다) 미리 감사드립니다.

답변

0

add_to_t에서 oldTreep를 업데이트하지만 로컬 변수이므로 함수를 떠나는 즉시 새 값이 손실됩니다.

당신은, 예를 들어, 반환 값

tree_node_t 
add_to_t(tree_node_t *oldTreep, // input/output - binary search tree 
     tree_element_t ele)  // input - element to add 
{ 
    return tree_insert(oldTreep, ele); 
} 

... 

myRootOfTheTree = add_to_t (myRootOfTheTree, element); 

또 다른 해결책은 항상 트리에서 하나 개의 더미 요소를 가지고있다과 그의 oldTreep를 업데이트 발신자에 oldTreep의 새 값을 반환 할 수 있습니다.