此程序中的所有内容都有效,但“搜索”功能除外,它根据字是否在二叉搜索树中返回true或false。我在“main”中有一个if语句,告诉用户该单词是否在树中。当我单步执行调试器时,它表示该函数应该返回true,但它会直接跳到“main”中if语句的else部分。为什么是这样?它似乎工作得很好,除非它被if语句“查看”。例如,“test.txt”包含单词“This Program Works”,每个单词在一行中。我知道它正在将它们添加到树中,因为当我“printAll”这些词出来时......
BinarySearchTree
#include "BinarySearchTree.h"
#include <iostream>
using namespace std;
bool BinarySearchTree::search(string target) {
if(target == data) {
return true;
}
else if(target < data) {
if(left == nullptr) {
return false;
}
else {
left->search(target);
}
}
else if(target > data) {
if(right == nullptr) {
return false;
}
else {
right->search(target);
}
}
}
主要
#include <fstream>
#include <string>
#include <iostream>
#include <vector>
#include "BinarySearchTree.h"
using namespace std;
int main(int argc, char** argv) {
//pull in text from a .txt file, one word at a time, add each to the BinarySearchTree.
//loop and let the user enter a word, let the user know if the word was in the file or not. Have the user type 0 to quit.
cout<<"Search: ";
string target;
getline(cin,target);
while(target != "0") {
///////////////////MAIN ISSUE HERE/////////////////////////////////
if(tree.search(target) == true) {
cout<<"\""<<target<<"\""<<" found in file."<<endl;
}
else {
cout<<"\""<<target<<"\""<<" not found in file."<<endl;
}
////////////////////////////////////////////////////////////////////
cout<<"Search: ";
getline(cin,target);
}
//now that the user is content, print all words that were in the text file, in lexicographical order.
tree.printAll();
cout<<endl;
return 0;
}
我知道其他一切都运作良好。
答案 0 :(得分:8)
你在这里没有回复任何东西:
else {
left->search(target);
}
它应该是:
else {
return left->search(target);
}
您与right->search(target)
有同样的错误。
答案 1 :(得分:2)
当您递归调用search()时,您永远不会返回该值。因此,您的大部分结果都会被丢弃,并且通常当您的函数简单地“退出”时,您的函数将返回未定义的值。&#34;
答案 2 :(得分:2)
您在搜索功能中缺少返回语句:
bool BinarySearchTree::search(string target) {
if(target == data) {
return true;
}
else if(target < data) {
if(left == nullptr) {
return false;
}
else {
return left->search(target);
}
}
else if(target > data) {
if(right == nullptr) {
return false;
}
else {
return right->search(target);
}
}
}
打开/收听编译器警告会抓住这类事情。