2017-10-17 189 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 ::項目*

任何幫助,將不勝感激沒有合適的轉換,得益於

+0

那麼錯誤很明顯,不是嗎? 'n-> item'包含一個'std :: string',你試圖返回一個指向'std :: string'的指針。 (在那個筆記上,*爲什麼*你想要返回一個指向'std :: string'的指針?爲什麼不返回一個引用呢?) – UnholySheep

+1

編譯你的程序並啓用所有警告。並把它們視爲錯誤。查找功能中有多少分支機構?有多少人以退貨聲明結束? – StoryTeller

回答

1

當你打電話lookupRec()遞歸,你也應該回報,否則,你將從該功能實例返回任何內容:return lookupRec(k, n->rightChild);

作爲@UnholySheep已經提到:返回正確的類型,因爲編譯器告訴你:return &(n->item);