これは、問題が最初にif文にある私の挿入機能BSTにノードを挿入
void BinTree::insert(Node * temp, NodeData * insData)
{
if (temp == NULL)
{
temp = new Node;
temp->pData = insData;
temp->left = NULL;
temp->right = NULL;
return;
}
//recursively go left or right
//....rest of the function
}
の最初の部分です。いくつかのノードを追加しています。
ここに、挿入関数を呼び出す関数があります。
void BinTree::insertMiddle(NodeData* arr[], int bottom, int top)
{
if (bottom <= top)
{
int middle = (bottom + top)/2;
if (arr[middle] == NULL)
{
return;
}
else
{
insert(root, arr[middle]);
arr[middle] = NULL;
insertMiddle(arr, bottom, middle - 1);
insertMiddle(arr, middle + 1, top);
}
}
else
{
return;
}
}
すべてのノードを挿入した後も、ルートはまだNULLです。実際、insert関数の最初のif文は毎回trueになります。
最初の挿入後にはnullであってはなりません。
何かを削除したり、ルートをNULLに設定しているとは思わない。
コードに問題がありますか?
このような問題を解決する適切なツールは、デバッガです。スタックオーバーフローを尋ねる前に、コードを一行ずつ進める必要があります。詳しいヘルプは、[小さなプログラムをデバッグする方法(Eric Lippert)](https://ericlippert.com/2014/03/05/how-to-debug-small-programs/)を参照してください。最低でも、あなたはあなたが行った観察と一緒に、[編集]あなたの質問あなたの問題を再現[、最小完全、かつ検証](http://stackoverflow.com/help/mcve)の例を含むようにする必要があります\しますデバッガ。 –
これを繰り返します:**関数パラメータはローカル変数です。ローカル変数への代入は外部世界に影響を与えません**。 –
ポインタが値渡しされていることに気づいていませんでした。私はそれが新しいポインタだと思ったが、渡されたポインタが指していたものと同じオブジェクトを指しているので、問題ではない。私は間違っていた。私の間違い。 – bhroask