对于家庭作业,我必须实现二叉树(不使用STL二叉树)容器。除了一个,我的所有树函数都有效。
链接到我的代码: https://github.com/matthamil/BinaryTree
在bt_class.h中,我有带模板实现的binary_tree模板类。
在bintree.h中,我有带模板实现的binary_tree_node类。
在main.cpp中,我有一堆测试来确保这些功能正常工作。
我的问题在这里:
template <class Item>
Item binary_tree<Item>::retrieve( ) const
{
return current_ptr->data();
}
我需要将此函数的返回类型作为binary_tree_node中存储的内容的数据类型。我不知道如何做到这一点。
使用当前实现,它返回指向当前节点的指针。
我应该可以写
cout << test->retrieve();
在main.cpp中输出,输出将是当前节点的数据。但是,由于它返回了一个指针,我必须添加一个额外的步骤:
*first = test->retrieve();
cout << first->data() << endl;
//"first"
任何人都可以提供任何帮助吗?
答案 0 :(得分:0)
我认为问题出在这里,add_left,add_right。
template <class Item>
void binary_tree<Item>::create_first_node(const Item& entry)
{
if (count == 0)
{
root_ptr = new Item(entry);
current_ptr = root_ptr;
count++;
} else {
std::cout << "Can't create first node for tree that has a first node already." << std::endl;
}
}
这里发生的是你传递一个节点的指针并调用new。所以基本上你要做的就是创建一个binary_tree_node(&amp; binary_tree_node)。
binary_tree_node<string> *first = new binary_tree_node<string> ("first");
binary_tree_node<string> *second = new binary_tree_node<string> ("second");
binary_tree_node<string> *third = new binary_tree_node<string> ("third");
test->create_first_node(*first);
test->add_right(*second);
test->add_left(*third);
因此在binary_tree_node中有另一个binary_tree_node。 有不同的方法来解决它。修复它的最好方法是将指针分配给current_ptr,或者只是在binary_tree_node中实现一个正确的复制构造函数。然而,正如评论已经解释的那样,这是一个不好的设计选择。 binary_tree类应在内部生成binary_tree_node类,而无需用户手动实例化类并处理这些指针。