如何检查(checkV)一个值是否在二叉搜索树中存在如果我输出"true"其他"false">
void search(Node* root, int checkV){
if(checkV > root->data){
search(root->right, checkV);
}
if(checkV < root->data){
search(root->left, checkV);
}
if(checkV == root->data){
cout << "true"<<endl;
}
else{
cout << "false"<<endl;
}
}
如果您需要使用函数"搜索",那么首先您应该检查根是否指向nullptr,然后如果您找到了数据,然后才应该搜索。像这样:
void search(Node* root, int checkV) {
if (root->data == nullptr) {
cout << "false" << endl;
}
else if (checkV == root->data) {
cout << "true" << endl;
}
else if (checkV > root->data) {
search(root->right, checkV);
}
else {
search(root->left, checkV);
}
}
但是如果从搜索中返回bool值并根据
打印结果会更好bool search(Node *root, int checkV) {
if (root == nullptr)
return false;
if (root->data == checkV)
return true;
return root->data < checkV ? check(root->left, checkV) : check(root->right, checkV);
}
我建议您修改您的函数,以便它返回bool
变量。要正确实现该功能,请考虑找不到要找的节点的情况。在这种情况下,最终你会得到一个nullptr
,也就是说,Node* root
不会指向一个存在的对象。您可以按如下方式构建if-else
块。
bool search(Node* root, int checkV){
if(root == nullptr) return false;
else if(checkV > root->data) return search(root->right, checkV);
else if(checkV < root->data) return search(root->left, checkV);
else if(checkV == root->data) return true; // you can use else as well
}
// Print out true if node exists, otherwise false.
cout << search(root, 5) << endl;