C++ BST插入
问题描述:
我正在使用C++实现BST,但是在实现插入功能后,我发现我只能在树中插入一个节点。我试过许多办法来解决这个问题,但他们没有工作......C++ BST插入
这是我实现插入功能的:
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;
}
感谢您对您的所有帮助。
答
您泄漏内存。看看这里的insertHelper
:
if (currentNode == NULL)
{
Node* newNode = new Node(customer);
currentNode = newNode;
newNode->setParent(parent);
return;
}
currentNode
是一个局部变量。它只存在于insertHelper
之内。因此,如果您分配给它,返回时不会在函数外反映出来。您通过父母,因此分配给其左侧或右侧成员:
newNode->setLeft(parent);
// or
newNode->setRight(parent);