2016-04-19 11 views
0

Ich verwende diesen Code https://rosettacode.org/wiki/AVL_tree#C.2B.2B als Basis für eine AVL-Struktur. Standardmäßig verwendet das Beispiel Ganzzahlen, aber ich muss Strings speichern. Also habe ich den Code so geändert, dass hauptsächlich der Root veröffentlicht wird und versucht wird, die Werte zu drucken.Versuch zu implementieren finden in Avl-Baum

22 /* AVL tree */ 
23 template <class T> 
24 class AVLtree { 
25   public: 
26     AVLtree(void); 
27     ~AVLtree(void); 
28     bool insert(T key); 
29     void deleteKey(const T key); 
30     void printBalance(); 
31     AVLnode<T> *root; 
32 
33   private: 
34 
35     AVLnode<T>* rotateLeft   (AVLnode<T> *a); 
36     AVLnode<T>* rotateRight   (AVLnode<T> *a); 
37     AVLnode<T>* rotateLeftThenRight (AVLnode<T> *n); 
38     AVLnode<T>* rotateRightThenLeft (AVLnode<T> *n); 
39     void rebalance     (AVLnode<T> *n); 
40     int height      (AVLnode<T> *n); 
41     void setBalance     (AVLnode<T> *n); 
42     void printBalance    (AVLnode<T> *n); 
43     void clearNode     (AVLnode<T> *n); 
44 }; 
.................................. 
247 int main(void) 
248 { 
249   AVLtree<std::string> t; 
250 
251   std::cout << "Inserting integer values 1 to 10" << std::endl; 
252   for (int i = 1; i <= 10; ++i) 
253     t.insert(i+" "); 
254 
255   std::cout << "Printing balance: "; 
256   t.printBalance(); 
257   std::cout << t.root->key + "\n"; 
258   std::cout << t.root->left->key + "\n"; 
259   std::cout << t.root->left->right->key + "\n"; 
260   std::cout << t.root->key; 
261 
262 } 

aber das Problem ist, dass das Ergebnis, die

Inserting integer values 1 to 10 
Printing balance: 1 0 -1 0 0 1 0 0 1 0 
ing balance: 
Printing balance: 
g balance: 
ing balance: 

ist ausdruckt Und ich habe keine Ahnung, warum.

Antwort

1

Ich glaube, Sie Ramsch-Strings in der Datenstruktur in diesen Zeilen einfügen:

for (int i = 1; i <= 10; ++i) 
    t.insert(i+" "); 

Die Art der " " ist const char *, und wenn Sie eine ganze Zahl, um es hinzuzufügen, können Sie eine weitere const char * erhalten, die von Offset der ursprüngliche Zeiger. Da die Zeichenfolge " " zufällig in Ihrem Programm vor der Zeichenfolge "Printing balance:" gespeichert wurde, haben Sie bei der Ausführung des Codes Zeiger auf verschiedene Positionen innerhalb der "Printing balance:"-Zeichenfolge generiert.

Um Zahlen in Zeichenfolgen in C++ richtig zu konvertieren, können Sie std::to_string verwenden.

+0

Danke Ich bekam einen Fehler mit to_string, entschied mich aber dafür, das Problem zu beheben, anstatt es zu umgehen. – dlrdlrdlr

Verwandte Themen