2016-11-09 2 views
-2

재귀를 사용하여 문자열 키로 BST에서 노드를 찾는 함수가 있습니다. 두 번째 함수에 대한 경고가 나타납니다. c4715 "모든 제어 경로가 값을 반환하지는 않습니다". 나는 어떤 경로가 값을 반환하지 않습니까?

여기 내 기능입니다 .. 정확하게 경로가 값을 반환하지 않는 것을 이해할 수 없다 :

TreeNode* Tree::findNodeByKey(const string &str) { 
    if (root == NULL) { 
     cout << "Tree is empty, nothing found" << endl; 
     return nullptr; 
    } 

    else { 
     return findNodeByKeyHelper(root, str); 
    } 
} 

TreeNode* Tree::findNodeByKeyHelper(TreeNode *node, const string &str) { 
    if (node->data == str) { 
     cout << "node is found" << endl; 
     return node; 
    } 
    else if (str < node->data) { 
     if (node->left == nullptr) { 
      cout << "element was not found" << endl; 
      return nullptr; 
     } 
     else { 
      findNodeByKeyHelper(node->left, str); 
     } 
    } 
    else if (str > node->data) { 
     if (node->right == nullptr) { 
      cout << "element was not found" << endl; 
      return nullptr; 
     } 
     else { 
      findNodeByKeyHelper(node->right, str); 
     } 
    } 
} 
+1

Tree :: findNodeByKeyHelper()의 모든 pates가 값을 분명히 반환하는 것은 아닙니다. –

+1

"* 모든 제어 경로가 값 *을 반환하지는 않습니다." 'return' 문에서 끝나지 않는 경로를 찾으십시오. – juanchopanza

+0

값을 반환하지 않는 부분을 이해할 수 없습니다. 그게 문제입니다. 그렇지 않으면이 질문을하지 않을 것입니다. – kekyc

답변

2

이러한 경로

else if (str < node->data) { 
    if (node->left == nullptr) { 
     cout << "element was not found" << endl; 
     return nullptr; 
    } 
    else { 
     findNodeByKeyHelper(node->left, str); 
     ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 
    } 
} 
else if (str > node->data) { 
    if (node->right == nullptr) { 
     cout << "element was not found" << endl; 
     return nullptr; 
    } 
    else { 
     findNodeByKeyHelper(node->right, str); 
     ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 
    } 
} 

반환 아무것도.

return 키워드를 삽입해야합니다. 예를

 return findNodeByKeyHelper(node->right, str); 

그리고 else의 마지막 else-if을 대체하십시오. 예를 들어,

if (node->data == str) { 
    //... 
} 
else if (str < node->data) { 
    //... 
} 
else { 
^^^^^^^ 
    //... 
} 
+0

오. 당신 말이 맞아요, 고마워요! 그러나 생각했던 것처럼, "요소를 찾을 수 없습니다"또는 "노드를 찾았습니다"경우 재귀가 끝나야합니다. 내가 맞습니까? – kekyc

+1

@kekyc 어떤 레벨의 seach에서는 실제로 함수는 노드 또는 nullpt를 이전 levelr로 반환합니다. 그러나 이전 레벨에서는 함수가 아무 것도 반환하지 않습니다. –

+0

참으로 ... 설명 주셔서 감사합니다! :) – kekyc

관련 문제