You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

C++ AVL树如何根据指定phoneNo值返回对应节点的key

问题原因

你的SearchKeybyPhone递归查找函数存在两处核心逻辑错误,是返回值异常的直接原因:

  1. 递归调用左右子树查找时,没有接收和回传子树的查找结果,就算子树中找到了匹配节点,正确的key也无法传递回上层调用,最终函数因执行完所有逻辑未显式返回值,触发未定义行为,返回栈内存中的随机值,也就是你拿到的错误结果4306440216。
  2. 没有处理空节点的返回逻辑,函数声明要求返回long long类型,但空节点分支、未找到匹配节点的场景都没有定义返回值,进一步加重了未定义行为。

修复方案

将Node.cpp中的SearchKeybyPhone函数替换为如下代码即可:

long long Node::SearchKeybyPhone(Node* root, string phoneNo) {
    // 空节点返回-1作为未找到标记,你的哈希key为正数,不会与有效key冲突
    if (root == NULL) {
        return -1;
    }
    // 当前节点匹配直接返回对应key
    if (root->phoneNo.compare(phoneNo) == 0) {
        cout << "Expected return value: " << root->key << endl;
        return root->key;
    }
    // 优先返回左子树的查找结果
    long long left_result = SearchKeybyPhone(root->left, phoneNo);
    if (left_result != -1) {
        return left_result;
    }
    // 左子树未找到则返回右子树的查找结果
    return SearchKeybyPhone(root->right, phoneNo);
}

可选优化点

你当前读取CSV的逻辑使用while (!myFile.eof())判断会导致最后一行多读一次,容易插入无效空节点,建议调整为将读id的getline作为循环判断条件,避免无效数据插入。

内容的提问来源于stack exchange,提问作者Edison1235

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.24 23:54:07