Я изучал двоичные деревья. И я нашел этот код для вставки узла в дерево. Здесь «root» - это указательная переменная типа структуры в классе «TreeType» как «частный член».Изменение корневого указателя двоичного дерева поиска
В этой функции «корень» передается по ссылке, поэтому в функции «Вставить» любые изменения в «дереве» также приводят к изменению «корня». Если снова вызвать функцию «Вставить», корень будет указывать на последний узел или он укажет на первый узел? Итак, по моему мнению, поскольку он будет указывать на последний узел, функция вставки больше не будет работать. Может ли кто-нибудь помочь в этом?
void Insert(TreeNode*& tree, ItemType item);
void TreeType::InsertItem(ItemType item)
// Calls the recursive function Insert to insert item into tree.
{
Insert(root, item);
}
void Insert(TreeNode*& tree, ItemType item)
// Inserts item into tree.
// Post: item is in tree; search property is maintained.
{
if (tree == NULL)
{// Insertion place found.
tree = new TreeNode;
tree->right = NULL;
tree->left = NULL;
tree->info = item;
}
else if (item < tree->info)
Insert(tree->left, item); // Insert in left subtree.
else
Insert(tree->right, item); // Insert in right subtree.
}
Насколько я вижу, это должно работать нормально, за исключением случая, когда у вас есть дубликат. Изменения в дереве НЕ будут влиять на корень, как вы сказали. Я не уверен, что проблема у вас есть –
Но попутно по ссылке значение источника также изменяется правильно. Тогда почему не здесь? Можете ли вы уточнить? –
void Insert (TreeNode * & tree, ItemType item); из-за TreeNode * & tree –