【发布时间】:2017-03-23 20:44:38
【问题描述】:
我正在尝试创建一个结构树并将树节点的数据插入到包含两个数据持有者的结构中。我的树/数据结构如下所示:
class BinarySearchTree
{
private:
struct IndexEntry
{
int acctID; // (key) Account identifier
long recNum; // Record number
};
struct tree_node
{
IndexEntry* entry;
tree_node* left;
tree_node* right;
};
tree_node* root;
public:
BinarySearchTree()
{
root = NULL;
}
bool isEmpty() const { return root == NULL; }
void insert(int, int);
int search(int);
int treeSearch(tree_node*, int);
};
此时我在插入函数中遇到内存访问冲突,老实说,这是我第一次尝试结构树,所以我不知道它是否是正确的插入开始的功能。但这里是:
void BinarySearchTree::insert(int rNum, int aNum)
{
tree_node* t = new tree_node;
tree_node* parent;
t -> entry -> recNum = rNum; //right here I get a violation
t -> entry -> acctID = aNum; //but if I remove the assignments
t -> left = NULL; //it gives me a violation further down
t -> right = NULL;
parent = NULL;
if (isEmpty())
root = t;
else
{
tree_node* current;
current = root;
// Find the Node's parent
while (current)
{
parent = current; //This whole block will give me a memory violation
if (t -> entry -> recNum > current -> entry -> recNum)
current = current -> right;
else current = current -> left;
}
if (t -> entry -> recNum < parent -> entry -> recNum)
parent -> left = t;
else
parent -> right = t;
}
}
有关内存访问违规的位置,请参阅我的第二个代码块中的 cmets。我在想代码中有一些未初始化的东西,但我真的不知道它会在哪里或如何初始化它。
任何帮助或指导将不胜感激!
【问题讨论】:
-
你从未初始化过
t->entry。 -
不要在
->周围加空格,这不习惯。 -
特别是不要和
>操作符混用。看起来像一列箭。
标签: c++ data-structures struct binary-search-tree