Вопрос можно суммировать по адресу: Как правильно обрабатывать инициализацию указателей в рекурсивной функции?Выделите указатели узлов в дереве в C++
Я думаю, что этот вопрос довольно прост, но я до сих пор не могу понять, как его решить.
У меня есть древовидная структура, определенная следующим образом:
class SplitNode{
public:
Data d;
SplitNodeParam snp;
SplitNode* left_; //will stay uninitialized
SplitNode* right_;}
Я построить дерево из его корня с помощью следующей рекурсивной функции:
void buildTree(SplitNode* n){
findBestSplit(n);
buildTree(n->left);
buildTree(n->right); //forget that the tree growing doesnt stop
}
я беру узел и свои данные и сделать разделение данных в зависимости от функции. И я хотел бы назначить текущий узел левой и правой дочерним элементам следующим образом.
void findBestSplit(SplitNode* n){
//Do stuff with data and parameters
SplitNodeParam left_parameter(/*Some parameters*/);
*(n->left)=SplitNode(left_parameter);
SplitNodeParam right_parameter(/*Some parameters*/);
*(n->right)=SplitNode(right_parameter);
}
Большая проблема, кажется, что я хочу, чтобы назначить нулевой указатель SplitNode на локальную переменную и надеемся получить его позже, который практически невозможно.
Я видел несколько примеров в C, чтобы сделать что-то подобное (с таНосом), но я хотел бы иметь, как это будет сделано аккуратно в C++
Заранее спасибо.
Я думаю, вы хотите что-то большее, как 'n-> left = new SplitNode (left_parameter)'. Теперь у вас есть копирование временного ключа в nullupr. –