일정은 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);
}
}
내가 인쇄이 개 도우미 기능을 가지고 있습니다.
은 ","당신이 나무의 마지막 요소를 감지하는 방법, 인쇄 안되어 내가 얻을 출력이 필요한 출력
{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