加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

c – 二进制树堆栈溢出

发布时间:2020-12-16 09:42:58 所属栏目:百科 来源:网络整理
导读:我根据Alex Allain的 example found here创建了一个二叉树.它在向它添加大约5000-6000个元素后抛出了一个堆栈溢出异常.知道如何防止堆栈溢出?原因是Insert()以递归方式调用自身. 2013年3月6日更新 这是我如何重构代码以避免堆栈溢出: void Insert(Key_T ke
我根据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;
            }
        }
}

解决方法

制作非递归的插入算法.您只需要搜索插入位置,这样就不需要堆栈调用了.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读