2012-12-05 7 views
0

주어진 키가있는 값에 대해 템플릿 이진 검색 트리를 검색 한 다음 해당 데이터 값에 대한 포인터를 반환하는 함수를 작성하고 있습니다. 주어진 키가 트리에 존재하지 않으면 반환하는 포인터는 NULL을 가리켜 야합니다. 지금까지 내가 가지고 :이진 검색 트리에서 값 검색

template <typename Item, typename Key> 
Item* BSTree<Item,Key>::search(const Key& key) const { 
    Item* entry = NULL; 
    Node* cursor = root; 
    while(cursor != NULL) { 
     if(key > cursor->data) 
      cursor = cursor->right; 
     else if(key < cursor->data) 
      cursor = cursor->left; 
     else 
      entry = cursor->data; 
    } 
    return entry; 
} 

하지만 내가 항목을 * 항목을 변환 할 수 없다는 말을하려고하면 오류가 발생합니다. 난 항상 포인터 문제가 있었고 이러한 오류를 수정하는 방법을 알아낼 수 없습니다.

+0

오류가 발생한 행은 무엇입니까? 'Node'의 정의는 무엇입니까? – bdonlan

+0

노드는 왼쪽과 오른쪽의 다른 노드에 대한 두 개의 포인터가있는 구조입니다. 또한 Item 유형의 템플릿 데이터 변수를 포함합니다. 오류가 어디에 항목 = 커서 -> 데이터를 설정하는 줄에서 발생했습니다. 그것을 고치고 그것을 정상으로 되돌려 놓은 후에 나는 더 이상 그 오류를 얻지 못합니다. 이제 프로그램이 컴파일 된 다음 항목이 초기화되지 않고 사용 중이라는 메시지가 종료됩니다. –

+0

이것은 이상하게 보입니다 : (key> cursor-> data) 키가 Key 유형이고 Item 유형의 데이터 인 경우. 또한 노드에 대한 정의를 보지 않고 엔트리 = & (커서 -> 데이터) 또는 Node 정의가 문제가되는지 여부에 대한 대답도 불가능합니다. –

답변

1

entry = cursor->data; 대신 entry = &(cursor->data);이 필요합니다.

또한 항목을 찾았 으면 즉시 반환하고 더 많은 항목을보고 트리를 계속 탐색하지 않는 것이 좋습니다.

관련 문제