fanluping123 2015-12-11 05:59 采纳率: 100%
浏览 1633
已采纳

二叉树搜索的问题,以及一个小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;
}

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

  • 写回答

4条回答 默认 最新

  • fanluping123 2015-12-11 15:06
    关注
      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;
                                    }
            }
        }
    }
    
    

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

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(3条)

报告相同问题?

悬赏问题

  • ¥15 求daily translation(DT)偏差订正方法的代码
  • ¥15 js调用html页面需要隐藏某个按钮
  • ¥15 ads仿真结果在圆图上是怎么读数的
  • ¥20 Cotex M3的调试和程序执行方式是什么样的?
  • ¥20 java项目连接sqlserver时报ssl相关错误
  • ¥15 一道python难题3
  • ¥15 牛顿斯科特系数表表示
  • ¥15 arduino 步进电机
  • ¥20 程序进入HardFault_Handler
  • ¥15 关于#python#的问题:自动化测试