私はこのページの初心者です。大学の宿題で、再帰なしでノードをツリーに挿入する機能を再構築することに本当に悩まされています。私は再帰的方法を与えられており、反復に変換する必要があります。これは、与えられた再帰コード:バイナリ検索ツリー再帰のない挿入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;
}
と私はこの1つを作った:
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'ポインタを割り当てません。 –
@ルックス、彼はそれを意図したかもしれませんが、 'temp'は単なるローカル変数なので、彼の問題は解決しません。 –