议程是使用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}
不应打印“,”,如何检测树的最后一个元素?我不了解情况。很简单,但我看不到。
最佳答案
考虑此问题的另一种方法是先打印逗号,而不要最后打印逗号。这样,您将永远不会看到逗号,因为它将是第一个打印的项目。
可以通过在辅助函数中引入bool
引用变量(未测试)来实现:
friend ostream& operator<<(ostream& out, const AVLTree& v)
{
bool firstTime = true;
out << "{";
v.print(out, v.root, firstTime);
out << "}";
return out;
}
void print(ostream& out, AVLnode<KEY, INFO>* curr, bool& firstTime) const
{
if (curr)
{
print(out, curr->left, firstTime);
out << (firstTime?"":", ") << curr->Key_ << ": " << curr->Info_;
firstTime = false;
print(out, curr->right, firstTime);
}
}
firstTime
跟踪是否是第一次打印。如果是这种情况,则不打印逗号,否则打印逗号。