1#include <iostream>
2using namespace std;
3
4class Node { // Узел хранит значение и указатели на двух потомков
5private: // Приватные атрибуты: к ним обращаются только методы
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 setValue(int v) { value = v; }
15 void setLeft(Node* n) { left = n; }
16 void setRight(Node* n) { right = n; }
17};
18
19Node* insert(Node* root, int v) { // Вставляет v в дерево поиска и возвращает корень
20 if (root == nullptr) // Пустое место: новый узел помещается сюда
21 return new Node(v); // Создаёт новый узел
22 if (v < root->getValue()) // Меньшие значения идут влево, большие — вправо
23 root->setLeft(insert(root->getLeft(), v)); // Спускается в левое поддерево
24 else
25 root->setRight(insert(root->getRight(), v)); // Спускается в правое поддерево
26 return root;
27}
28
29int main() {
30 Node* root = buildTree(); // Показанное дерево, уже построенное
31 root = insert(root, v); // Первый вызов, из main
32 return 0; // Конец операции
33}