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; } } } 解决方法
制作非递归的插入算法.您只需要搜索插入位置,这样就不需要堆栈调用了.
(编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
相关内容