ここにあるAlexAllainの例に基づいてバイナリツリーを作成しました。約5000〜6000の要素を追加した後、スタックオーバーフロー例外をスローします。スタックオーバーフローを防ぐ方法について何か考えはありますか?原因は、Insert()
自分自身を再帰的に呼び出すことです。
2013年3月6日更新
スタックオーバーフローを回避するためにコードをリファクタリングした方法は次のとおりです。
void Insert(Key_T key, Value_T val, QuickMapNode<Key_T, Value_T> *leaf)
{
while (true)
if(key < leaf->key)
{
if(leaf->left) leaf = leaf->left;
else
{
leaf->left = new QuickMapNode<Key_T, Value_T>;
leaf->left->key = key;
leaf->left->val = val;
leaf->left->parent = leaf;
leaf->left->left = NULL; // Sets the left child of the child node to null
leaf->left->right = NULL; // Sets the right child of the child node to null
break;
}
}
else if (key >= leaf->key)
{
if(leaf->right) leaf = leaf->right;
else
{
leaf->right = new QuickMapNode<Key_T, Value_T>;
leaf->right->key = key;
leaf->right->val = val;
leaf->right->parent = leaf;
leaf->right->left = NULL; // Sets the left child of the child node to null
leaf->right->right = NULL; // Sets the right child of the child node to null
break;
}
}
}