【发布时间】:2017-12-28 14:29:51
【问题描述】:
议程是使用 ostream 运算符打印 AVL 树的内容。内容必须以特定格式打印。
树是使用模板实现的。 一个简单的主要实现。
AVLTree<int, float> tree;
for(int i = 0; i < 10; i++)
tree.insert(i, i+0.1);
cout << tree;
Ostream 运算符
friend ostream& operator<<(ostream& out, const AVLTree& v)
{
out << "{";
v.print(out, v.root);
out << "}";
return out;
}
void print(AVLnode<KEY,INFO>* curr)const
{
if(curr)
{
print(curr->left);
print(curr->right);
}
}
void print(ostream& out, AVLnode<KEY, INFO>* curr)const
{
if(curr)
{
print(out, curr->left);
out << curr->Key_ << ": " << curr->Info_<<", ";
print(out, curr->right);
}
}
我有两个用于打印的辅助函数。
我得到的输出是
{1:1.1, 2:2.1. 3:3.1, 4:4.1, 5:5.1, 6:6.1, 7:7.1, 8:8.1, 9:9.1, }
需要的输出是
{1:1.1, 2:2.1. 3:3.1, 4:4.1, 5:5.1, 6:6.1, 7:7.1, 8:8.1, 9:9.1}
“,”不应该被打印,你如何检测树的最后一个元素?我无法理解这种情况。很简单,但我看不到。
【问题讨论】:
-
逗号似乎出现在左右打印之间。也许最后右边没有打印任何东西?
-
您也可以采用稍微不同的方法,尝试在输出中打印逗号 first,而不是最后一个。这样就不会出现尾随逗号。检测一个节点是否是第一次打印,IMO,比尝试检测它是否是最后一个打印节点更容易掌握。
标签: c++ templates recursion avl-tree ostream