1#include <iostream>
2using namespace std;
3
4class Node { // Ein Knoten enthält seinen Wert und Zeiger auf seine beiden Kinder
5private: // Private Attribute: nur die Methoden greifen darauf zu
6 int value;
7 Node* left;
8 Node* right;
9public:
10 Node(int v) : value(v), left(nullptr), right(nullptr) {}
11 int getValue() const { return value; }
12 Node* getLeft() const { return left; }
13 Node* getRight() const { return right; }
14 void setLeft(Node* n) { left = n; }
15 void setRight(Node* n) { right = n; }
16};
17
18void preorder(Node* node) { // Durchläuft den Teilbaum mit Wurzel node
19 if (node == nullptr) return; // Basisfall: ein leerer Teilbaum hat nichts zu besuchen
20 cout << node->getValue() << " "; // Besucht den Knoten: verarbeitet seinen Wert
21 preorder(node->getLeft()); // Durchläuft den linken Teilbaum
22 preorder(node->getRight()); // Durchläuft den rechten Teilbaum
23} // Kehrt zum Aufrufer zurück
24
25Node* insert(Node* root, int v) { // Fügt v in den Suchbaum ein und gibt die Wurzel zurück
26 if (root == nullptr) return new Node(v); // Freie Stelle: hier kommt der neue Knoten hin
27 if (v < root->getValue()) // Kleinere Werte gehen nach links, größere nach rechts
28 root->setLeft(insert(root->getLeft(), v));
29 else
30 root->setRight(insert(root->getRight(), v));
31 return root;
32}
33
34Node* buildTree() { // Baut den Baum auf, indem die Werte nacheinander eingefügt werden
35 int values[] = {60, 45, 85, 68, 21, 55, 32}; // Die Werte des angezeigten Baums in Einfügereihenfolge
36 Node* root = nullptr;
37 for (int v : values) root = insert(root, v);
38 return root;
39}
40
41int main() {
42 Node* root = buildTree(); // Der Baum aus der Animation, bereits aufgebaut
43 preorder(root); // Erster Aufruf, aus main
44 cout << endl; // Ende der Traversierung
45 return 0;
46}