我正在使用C ++实现BST,但在实现了insert函数之后,我发现我只能在树中插入一个节点。我已经尝试了很多方法来解决这个问题,但是他们没有解决问题...
这是我对insert函数的实现:
void BSTree::insertHelper(Customer* customer, Node* currentNode, Node* parent)
{
if (currentNode == NULL)
{
Node* newNode = new Node(customer);
currentNode = newNode;
newNode->setParent(parent);
return;
}
if (*customer < *currentNode->getCustomer())
insertHelper(customer, currentNode->getLeft(), currentNode);
else insertHelper(customer, currentNode->getRight(), currentNode);
}
bool BSTree::insert(string lastName, char initial, int account)
{
Customer* customer = new Customer(lastName, initial, account);
if (isEmpty())
{
Node* newNode = new Node(customer);
root = newNode;
return true;
}
Node* currentNode = root;
insertHelper(customer, currentNode, NULL);
return true;
}
感谢您的帮助。
答案 0 :(得分:0)
你泄漏了内存。请看insertHelper
:
if (currentNode == NULL)
{
Node* newNode = new Node(customer);
currentNode = newNode;
newNode->setParent(parent);
return;
}
currentNode
是一个局部变量。它仅存在于insertHelper
内。因此,如果您指定它,那么当您返回时,它不会反映在函数外部。您传递父项,因此请指定其左侧或右侧成员:
newNode->setLeft(parent);
// or
newNode->setRight(parent);