Как я могу проверить (checkV), существует ли значение в двоичном дереве поиска, выводит ли я «истина» иначе «ложь»

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;
    }
}
0
Asithandile Ludonga 10 Окт 2021 в 20:32

2 ответа

Лучший ответ

Если вам нужно использовать функцию «поиск», то сначала вы должны проверить, указывает ли корень на 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);
}
1
Izeytee 10 Окт 2021 в 17:55

Я предлагаю вам изменить вашу функцию так, чтобы она возвращала переменные bool. Чтобы правильно реализовать функцию, подумайте о случаях, когда вы не можете найти нужный узел. В таких случаях в конечном итоге вы получите nullptr, то есть Node* root не будет указывать на существующий объект. Вы можете построить блоки if-else, как показано ниже.

bool search(Node* root, int checkV){
    if(root == nullptr) return false;
    else if(checkV > root->data) search(root->right, checkV);
    else if(checkV < root->data) 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;  
0
Muhteva 10 Окт 2021 в 17:47