c++ - 尝试为两个参数调整二叉搜索树,导致崩溃 (C++)

标签 c++ string binary-search-tree

对于一项作业,我需要实现二叉搜索树的几个功能。我已经得到了看起来像逻辑代码的东西,但是,每当我尝试实现插入节点功能时,我都会遇到程序崩溃。这是我的插入函数代码:

    void insert (K k, V v)
    {
        TreeNode<K,V> * treeNode = NULL;
        TreeNode<K,V> *temp=NULL;
        TreeNode<K,V> *prev=NULL;
        temp = root;

    while(temp)  //This is the loop that causes a crash, even if I remove the loop.
    {
        prev = temp;
        if (temp->key < treeNode->key)
            temp = temp->right;
        else
            temp = temp->left;
    }

    if (prev==NULL)
        root = treeNode;
    else
    {
        if (prev->key<treeNode->key)
            prev->right = treeNode;  
        else
            prev->left = treeNode;
    }





    }

我还将包含 TreeNode 类:

template <class K, class V> class TreeNode
{
public:
TreeNode(K k, V v): key(k), value(v), left(0), right(0) {}

K       key;
V       value;
TreeNode<K,V>   *left;
TreeNode<K,V>   *right;
template <class X, class Y> friend std::ostream & operator 
<< (std::ostream &s,const TreeNode<X,Y> &t);    
};

当我尝试执行命令时 t.insert("bob", "bobdata");砰,立即崩溃。我已经注释掉了各种参数并发现指示的部分是问题所在,尽管除此之外我还是被卡住了。即使我删除循环并只执行一次,它也会发生,所以我不会陷入无穷大。我觉得这可能与我正在传递字符串这一事实有关,但我不确定,如果这是问题所在,我也没有足够的知识来解决它。有没有人可以告诉我我在这里做错了什么?非常感谢!

最佳答案

你在循环之前的任何地方分配了 treeNode 吗?它看起来像 treeNodeNULL 所以当你在条件中取消引用它时它会抛出一个异常:

if (temp->key < treeNode->key)  // This throws an exception if treeNode is not set
                ^^^^^^^^^^^^^

关于c++ - 尝试为两个参数调整二叉搜索树,导致崩溃 (C++),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27223514/

相关文章:

c++ - g++ 未报告未实例化模板中的某些错误

c++ - ODBC 文档清晰度

string - PowerShell-从多个文件名中删除某些字符串

Java二分查找词树

c++ - 二叉搜索树的析构函数

C++ 最大随机数生成器

c++ - 错误 C2296 : '%' : illegal, 左操作数在 C++ 中的类型为 'double'

c - 不在 if 语句之外打印

c# - 如何通过格式将字符串转换为日期时间?

algorithm - 有效地重新平衡 2^n-1 个节点的树?