对于一项作业,我需要实现二叉搜索树的几个功能。我已经得到了看起来像逻辑代码的东西,但是,每当我尝试实现插入节点功能时,我都会遇到程序崩溃。这是我的插入函数代码:
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
吗?它看起来像 treeNode
是 NULL
所以当你在条件中取消引用它时它会抛出一个异常:
if (temp->key < treeNode->key) // This throws an exception if treeNode is not set
^^^^^^^^^^^^^
关于c++ - 尝试为两个参数调整二叉搜索树,导致崩溃 (C++),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27223514/