議題は、ostream演算子を使用してAVLツリーの内容を出力することです。内容は特定の形式で印刷する必要があります。AVLツリーのOstream演算子C++
ツリーはテンプレートを使用して実装されています。 シンプルな主な実装です。
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);
}
}
私は印刷のための2つのヘルパー関数を持っています。
は「」あなたは木の最後の要素を検出する方法を、印刷されることになっていない私が手出力が要求出力が
{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, }
されますか?私はその状態を理解していない。シンプルですが、私はそれを見ることができません。
out << curr->Key_ << ": " << curr->Info_;
if (some_condition_of_yours) {
out << ", ";
}
else {
out << " ";
}
はあなたの内部ロジックと条件を交換してください:
左と右の印刷の間にコンマが表示されるようです。おそらく最後には何も印刷されませんか? –
また、やや異なったアプローチを取って、コンマ*ファースト*を出力に印刷して最後に印刷しないでください。そうすれば、末尾にカンマが現れることはありません。ノードが最初に印刷されるかどうかを検出するIMOは、それが印刷される最後のノードであるかどうかを検出しようとするよりも把握が容易です。 – PaulMcKenzie