2017-10-17 5 views
0

저는 C++에서 재귀를 사용하여 이진 트리를 만들었습니다. 왜 항목을 반환 할 수 없는지 알 수는 없지만, 내가보고있는 것 중 가장 간단한 것이지만 그것을보고있었습니다. 너무 오래 알아낼 수 없습니다.이진 트리 조회

BST::Item * BST::lookup(Key k) 
{ 
    return(lookupRec(k, root)); 
} 

BST::Item * BST::lookupRec(Key k, Node* n) 
{ 
    if (k == n->key) 
    { 
     return n->item; //problem is here 
    } 
    else if (k > n->key) 
    { 
     lookupRec(k, n->rightChild); 
    } 
    else if (k < n->key) 
    { 
     lookupRec(k, n->leftChild); 
    } 
    else 
    { 
     return nullptr; 
    } 
} 

몇 가지 상황에 맞는 항목 using Item = std::string; 그래서 나는 키를 사용하여 조회를 전화입니다 추가 할 수 있으며 작업자 함수를 호출하고 키와 루트 키 일치하지만은 N-를 반환하지 않습니다 때 항목을 반환해야합니다 그것은, 어떤 도움을 주시면 감사하겠습니다

BST : 항목 *에 BST : 항목에서 더 적합한 변환이 없다라고 감사 재귀 lookupRec() 전화

+0

오류는 분명하지 않습니까? 'n-> item'은'std :: string'을 가지고 있고'std :: string'에 대한 포인터를 반환하려고합니다. (참고로 * 왜 *'std :: string'에 대한 포인터를 반환하겠습니까? 왜 그것에 대한 참조를 반환하지 않습니까?) – UnholySheep

+1

모든 경고가 활성화 된 상태에서 프로그램을 컴파일하십시오. 그리고 그들을 오류로 취급하십시오. 조회 기능에는 몇 개의 분기가 있습니까? 얼마나 많은 사람들이 반환 진술로 끝나는가? – StoryTeller

답변

1

때문에> 항목은 또한 당신은, 그렇지 않으면 반환해야 해당 함수 인스턴스에서 아무 것도 반환하지 않습니다. return lookupRec(k, n->rightChild);

그리고 @UnholySheep 이미 언급했듯이 컴파일러에서 알려주므로 올바른 유형을 반환하십시오. return &(n->item);