二进制搜索树模板

时间:2015-05-03 23:12:34

标签: c++ binary-search-tree

我对c ++很新,我最近收到了一个使用模板创建自己的二叉搜索树的项目。目标是二叉树能够接收任何类型的数据。 IntBinaryTree.h应该能够接受EmployeeInfo的对象。我已经得到它编译,但我得到一个错误消息 glibc检测到双重免费或腐败(fasttop)我不完全确定这意味着什么。另外我不确定我是否正确设置了程序。还要注意,我正在main.cpp中逐个测试函数,这就是为什么只使用了插入函数。

更新 我通过TreeNode * newNode = new TreeNode为insertNode函数分配内存,现在我收到“在实例化void IntBinaryTree :: insertNode(T)中的错误消息)[与T = EmployeeInfo]:main.cpp:22:29从这里需要“

file.InputStream.Seek(0, SeekOrigin.Begin);

1 个答案:

答案 0 :(得分:0)

insertNode方法中,您没有为节点分配任何空间,而是使用未初始化的指针:

TreeNode<T> *newNode;

newNode->value = val;
newNode->left = newNode->right = NULL;

您需要为节点分配一些内存:

TreeNode<T> *newNode = new TreeNode<T>;

我强烈建议您学习使用调试器,这样您就可以逐行浏览代码以查看它在做什么。没有人每次都写出完美的代码,调试器是查看出错的最简单方法。

编辑: 上面的代码不起作用,因为你没有Employee的默认构造函数,但只有TreeNode的默认构造函数。这意味着您无法创建包含TreeNode。{/ p>的Employee

解决此问题的最佳方法是向TreeNode添加一个构造函数,该构造函数接受一个引用T对象的参数,以便它可以初始化自己的value来自该参数的对象。

将此添加到您的TreeNode课程

TreeNode(T &val) : value(val), left(NULL), right(NULL) { }

此代码将val参数复制到value并初始化leftright指针。

然后将您的insert代码更改为。

TreeNode<T> *newNode = new TreeNode < T > (val) ;
//Insert the Node
insert(root, newNode);

请注意,无需设置左右指针,因为构造函数现在为您执行此操作。