上下文:使用二叉树(BinStabloMapa)实现地图
任务如下:
向BinStabloMapa类添加一个新的构造函数,该类接收2个正整数数组(键数组和值数组)。给定这两个数组,构造函数应该创建一个二叉树,条件是keys数组的元素是其前序遍历中树的元素,而values数组的元素是对应于键的值。键数组中的值为0表示该点中没有节点。
我在这里有一个测试示例:
int keys[9] = {6, 4, 3, 0, 0, 5, 0, 0, 0};
int values[9] = {6, 4, 3, 0, 0, 5, 0, 0, 0};
BinStabloMapa<int,int> m(keys, values, 9, 1);
cout << m[3] << " " << m[4] << " " << m[5] << " " << m[6] << " " << m[9];
它应该输出:3,4,5,6,0 - 但它输出3,4,0,6,0。
这是带有辅助方法的构造函数:
template<typename Key, typename Value>
void BinStabloMapa<Key, Value>::preOrderWithArray(BSNode<Key, Value>*& node, int* keys, int* values, const int& size, int &index){
if(index == size) return;
if(node == _root){
_root = new BSNode<Key, Value>(values[index], keys[index], 0, 0, 0);
node = _root;
} else{
node->_key = keys[index];
node->_value = values[index];
}
node->_left = new BSNode<Key, Value>(Value(), Key(), node, 0, 0);
node->_right = new BSNode<Key, Value>(Value(), Key(), node, 0, 0);
index++;
preOrderWithArray(node->_left, keys, values, size, index);
preOrderWithArray(node->_right, keys, values, size, index);
}
//Constructor
template<typename Key, typename Value>
BinStabloMapa<Key, Value>::BinStabloMapa(int *keys, int *values, int size, int dummy){
int index = 0;
_root = 0;
preOrderWithArray(_root, keys, values, size , index);
_numOfElements = size;
}
我知道有类似的问题,但我不明白为什么这段代码不起作用?也许它可以改进?
提前致谢。
编辑:
以下是来自valgrind的内容,您可能会发现它很有用:
内存泄漏(BinStabloMapa.h:114)
Valgrind输出: 1个块中的20个字节肯定在丢失记录1中丢失1 在0x4005B65:operator new(unsigned)(vg_replace_malloc.c:163) 在0x4005B65:operator new(unsigned)(vg_replace_malloc.c:163) by 0x804AE6D:BinStabloMapa :: preOrderWithArray(BSNode &amp;,int ,int *,int const&amp;,int&amp;)(BinStabloMapa.h:114) by 0x804AE6D:BinStabloMapa :: preOrderWithArray(BSNode &amp;,int ,int *,int const&amp;,int&amp;)(BinStabloMapa.h:114) by 0x804AEDE:BinStabloMapa :: preOrderWithArray(BSNode &amp;,int ,int *,int const&amp;,int&amp;)(BinStabloMapa.h:117) by 0x804AEDE:BinStabloMapa :: preOrderWithArray(BSNode &amp;,int ,int *,int const&amp;,int&amp;)(BinStabloMapa.h:117) by 0x804AEDE:BinStabloMapa :: preOrderWithArray(BSNode &amp;,int ,int *,int const&amp;,int&amp;)(BinStabloMapa.h:117) by 0x804AEDE:BinStabloMapa :: preOrderWithArray(BSNode &amp;,int ,int *,int const&amp;,int&amp;)(BinStabloMapa.h:117) by 0x804AEDE:BinStabloMapa :: preOrderWithArray(BSNode &amp;,int ,int *,int const&amp;,int&amp;)(BinStabloMapa.h:117) by 0x804AEDE:BinStabloMapa :: preOrderWithArray(BSNode &amp;,int ,int *,int const&amp;,int&amp;)(BinStabloMapa.h:117) by 0x804AF77:BinStabloMapa :: BinStabloMapa(int *,int *,int,int)(BinStabloMapa.h:129) by 0x804AF77:BinStabloMapa :: BinStabloMapa(int *,int *,int,int)(BinStabloMapa.h:129) by 0x8048BD9:main(autotest.cpp:178) by 0x8048BD9:main(autotest.cpp:178)
在它说内存泄漏的行我做node-&gt; _right等于等。