Baum in Console ausgeben
-
Hey,
ich muss in einer Aufgabenstellung u.A. einen Baum grafisch auf der Console ausgeben.
In meinen Beispielschnispeln taucht dieses hier auf:
void printR(Node* p, int level) { if(p != 0) { for(int i=0; i < level, i++) cout << " "; cout << p->value << endl; for(Node* q = p->left; q != 0; q=q->right) printR(q,level+1); } }Hierdurch sollte eigentlich gemäß eines Unix Filesystemes beginnend bei der Wurzel alle Elemente ausgegeben werden. Hier fehlt mir aber die linke Seite des Teilbaumes.
Sieht hier Jemand den Fehler?
Wenn ich ein normale PreOrder mache dagegen:
void printR(Node* p, int level) { if(p != 0) { for(int i=0; i < level; i++) cout << " "; cout << p->value << endl; printR(p->left,level+1); printR(p->right,level+1); } }erhalte ich meinen kompletten Baum.
Das erste Schnipsel sollte aber auch funktionieren, evtl. hab ich mich hierbei verschrieben?Bitte um Hilfe
-
So sollte das auf der Console aussehen:
http://img3.imagebanana.com/view/aj65hy0l/aktuell_cpp.JPGSo sieht es jetzt aus:
http://img3.imagebanana.com/view/z3c2quw/aktuell2_cpp.JPGUnd das ist der Code im Moment:
void printR(Node*& p, int level) { if(p != 0) { for(int i=0; i < level-1; i++) cout << " "; if(level != 0) cout << "|--"; cout << p->value << endl; if(p->left != 0) { printR(p->left,level+1); } if(p->right != 0) { printR(p->right,level+1); } } }Wie komme ich zum # ?
-
So etwa? (ungetestet)
void printR(Node*& p, int level) { for(int i=0; i < level-1; i++) cout << " "; if(level != 0) cout << "|--"; if(p) cout << p->value << endl; else cout << '#' << endl; if(p->left != 0) { printR(p->left,level+1); } if(p->right != 0) { printR(p->right,level+1); } }Gruß,
CSpille
-
CSpille schrieb:
So etwa? (ungetestet)
Habs getestet und das ändert an meiner vorherigen Ausgabe rein gar nichts...
Mal noch ne andere Frage:
Eine levelOrder wird ja mit Hilfe einer Warteschlange realisiert...Jetzt hab ich in meinen Unterlagen
Queue<Node*>queue;stehen mit den Methoden:
queue.front(p);
queue.remove()
queue.push(p);
queue.insert(p->left);
queue.insert(p->right);weiss Jemand welche lib das sein soll?
In den Unterlagen die ich bekommen habe steht hierzu nichts mehraber die queue aus der STL ist es jedenfalls nicht, gibt überschneidungen aber insert/remove/empty sind gänzlich unbekannt....*omg*