Я новичок на странице, и я действительно зациклился на домашнем задании моего университета, чтобы воссоздать функцию, которая вставляет узлы в дерево без рекурсии. Мне был дан рекурсивный метод, и мне нужно преобразовать его в Iterative. Это дано Рекурсивный Код:Двоичный поиск Дерево Вставка C без рекурсии
TreeNode *InsertTree(TreeNode *root, TreeNode *newnode)
{
if (!root)
{
root = newnode;
root->left = root->right=NULL;
}
else if (newnode->entry < root->entry)
{
root->left = InsertTree(root->left, newnode);
}
else
{
root->right = InsertTree(root->right, newnode);
}
return root;
}
, и я сделал это один:
TreeNode *InsertTree(TreeNode *root, TreeNode *newnode)
{
if (!root)
{
root = newnode;
root->left = root->right=NULL;
}
else
{
TreeNode * temp = root, *prev = NULL;
while(temp)
{
if (temp->entry < newnode->entry)
temp = temp->right;
else
temp = temp->left;
}
newnode;
temp->left = temp->right = NULL;
}
return root;
}
он работает в течение первых элементов, но не сохраняет элементы отдыха. Любые идеи? Заранее спасибо
Для случая с не-корневым кодом ваш код никогда не назначает указатель 'newnode' как дочерний элемент любого узла, уже находящегося в дереве. –
@ Roux, хотя он, возможно, и предполагал, что это не решит его проблему, потому что 'temp' является только локальной переменной. –