В add
, когда вы делаете
root = new node;
root
- это переменная класса, так что это не проблема, и это правильный способ сделать это. Однако в addRecursive
, когда вы делаете
currentNode = new node;
currentNode
- это указатель, который передается по значению вашей функции, поэтому вы только заставляете локальную переменную currentNode
указывать на другое место в памяти. Вам нужно передать указатели по ссылке, чтобы при изменении параметра он изменял оригинал, а не только локальную переменную. Просто сделайте подпись вашей функции от addRecursive
до void addRecursive(node*& currentNode, const string& newData)
. Это заставит указатели передаваться в функцию по ссылке.
Также обратите внимание, что я изменил string newData
на const string& newData
. Таким образом, вы избегаете делать копию строки в памяти каждый раз, когда вызываете функцию. Вы должны сделать это изменение во всех своих функциях, когда вам не нужно изменять копию строки, переданной функции, для повышения эффективности.