二叉树搜索的问题,以及一个小bug

#include<iostream>
#include<string>
using namespace std;
class node{
public:
    string name;
    string keyword;
    node* left;
    node* right;
    node(string a = "0", string b = "0", node* c = 0, node* d = 0) :
        name(a), keyword(b), left(c), right(d){}
    ~node(){
        left = 0; right = 0;
    }
};
void search(string name2, string keyword2, bool& nameb, bool& keywordb,node* root){
    node* p = root;
    nameb = keywordb = false;
    while (p){
        if (name2 < p->name)
            p = p->left;
        else if (name2>p->name)
            p= p->right;
        else {
            nameb = true;
            if (keyword2 == p->keyword)
                keywordb = true;
            else
                keywordb = false;
        }
    }
}

int main(){
    node a, b, c, d, e;
    a.name = "cang"; a.keyword = "12345";
    b.name = "123"; b.keyword = "123";
    c.name = "onepiece"; c.keyword = "54321";
    d.name = "fan"; d.keyword = "fan123";
    e.name = "wang"; e.keyword = "@@110";
    a.left = &b;
    a.right = &c;
    c.left = &d;
    c.right = &e;
    node* root = &a;
    cout << "请输入要登录的用户名和密码" << endl;
    string aa, bb;
    cin >> aa >> bb;
    bool nameb, keywordb;//判断用户名和密码正确与否
    search(aa,bb, nameb, keywordb, root);
    if (nameb&&keywordb)cout << "登录成功!" << endl;
    else if (nameb == true && keywordb == false){
        while (keywordb == false){
            cout << "您输入的密码有误,请重新输入密码" << endl;
            cin >> bb;
            search(aa,bb, nameb, keywordb, root);
            if (keywordb == true)
                cout << "登录成功!" << endl;
        }
    }
    return 0;
}

可以通过编译,输入完后,程序没有反应,我是在做一个二叉树的实验,所以把问题精简成这样来测试,
我百思不得其解啊

  void search(string name2, string keyword2, bool& nameb, bool& keywordb,node* root){
    node* p = root;
    nameb = keywordb = false;
    while (p){
        if (name2 < p->name)
            p = p->left;
        else if (name2>p->name)
            p= p->right;
        else {
            nameb = true;
            if (keyword2 == p->keyword){
                keywordb = true;
                                return;
                                }
            else{
                keywordb = false;
                                return;
                                }
        }
    }
}

这样改似乎更好些,我还是太粗心了啊,基础不牢固啊

你的程序有2点问题:
1.search函数会陷入死循环,即当可以找到节点的时候,没有返回,也没有改变指针p,这样while(p)就会一直出不来。
2.main函数中叶子节点b,d,e的left和right,没有赋值为NULL。

b,d,e的left和right在构造函数中初始化了,在main函数中可以不初始化;

楼上回答正确。

 void search(string name2, string keyword2, bool& nameb, bool& keywordb,node* root){
    node* p = root;
    nameb = keywordb = false;
    while (p){
        if (name2 < p->name)
            p = p->left;
        else if (name2>p->name)
            p= p->right;
        else {
            nameb = true;
            if (keyword2 == p->keyword)
                keywordb = true;
            else
                keywordb = false;
        }
        if (nameb&&keywordb) break;//修改
    }
}