c – 二进制树堆栈溢出
作者:互联网
我根据Alex Allain的example found here创建了一个二叉树.它在向它添加大约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;
}
}
}
解决方法:
制作非递归的插入算法.您只需要搜索插入位置,这样就不需要堆栈调用了.
标签:c,stack-overflow,binary-tree 来源: https://codeday.me/bug/20190729/1568701.html