我是新來的頁面,我真的堅持在我的大學的作業重新創建一個函數,插入節點到樹沒有遞歸。我已經給了遞歸方法,我需要將其轉換爲迭代。這是給定的遞歸代碼:二元搜索樹插入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'只是一個局部變量。 –