将元素插入二叉搜索树时的Seg Fault 11

时间:2014-08-07 01:56:59

标签: c++ segmentation-fault binary-search-tree

我正在用C ++编写一个程序,但我无法弄清楚为什么我会一直遇到分段错误。以下是我目前使用的代码部分,这给我带来了麻烦:

在我的主要功能中:

Tree* myTree;
myTree = CreateBST();

const Element a = 23;
InsertBST(myTree, a);

const Element b = 8;   //If I get rid of this line and the next one, the error goes away.
InsertBST(myTree, b);  //But I need to be able to insert data into my tree beyond just the root!

然后是insertBST函数本身及其辅助函数:

void InsertBST(Tree * rTree, const Element nData){
    rTree->root = InsertNodeBST(rTree->root, nData);
}    

//========================================================================================
TreeNode* InsertNodeBST(TreeNode* rNode, const Element nData)
{
    if(rNode->data == -999)   //A new tree's root->data will always be initialized to -999
   {
       TreeNode* rNew = new TreeNode;
       rNew->data = nData;
       rNew->left = NULL;
       rNew->right = NULL;
       return rNew;
   }
   else if(rNode == NULL)
   {
       TreeNode* rNew = new TreeNode;
       rNew->data = nData;
       rNew->left = NULL;
       rNew->right = NULL;
       return rNew;
   }
   else if(nData == rNode->data)
   {
       return rNode;
   }
   else if(nData < rNode->data)
   {
       rNode->left = InsertNodeBST(rNode->left, nData);
       return rNode;
   }
   else
   {
       rNode->right = InsertNodeBST(rNode->right, nData);
       return rNode;
   }

}

我们需要使用的结构如下:

struct TreeNode {
  Element data;
  TreeNode *left;
  TreeNode *right;
};

struct Tree{
    TreeNode *root;
};

有没有人看到我明显错过的可能导致我的分段错误?我是CS的新手,我在7年内参加了我的第一次CS课程,所以如果这是一个明显的错误我道歉。感谢。

1 个答案:

答案 0 :(得分:1)

if (rNode->data == -999)
{
    ...
}
else if (rNode == NULL)
{
    ...
}

如果rNodeNULL,则rNode->data崩溃。你的意思是以相反的顺序放置这些if吗?