gpt4 book ai didi

c++ - AVL 树 C++ 的 Ostream 运算符

转载 作者:行者123 更新时间:2023-12-03 12:49:02 30 4
gpt4 key购买 nike

议程是使用 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 跟踪是否是第一次打印。如果是这种情况,则不打印逗号,否则打印逗号。

关于c++ - AVL 树 C++ 的 Ostream 运算符,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48009294/

30 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com