#ifndef __BST #define __BST #include /* Узел дерева. */ template struct TreeNode { T _data; TreeNode * _parent, * _left, * _right; TreeNode(T data) : _data(data), _parent(nullptr), _left(nullptr), _right(nullptr) {} TreeNode(T data, TreeNode * parent) : _data(data), _parent(parent), _left(nullptr), _right(nullptr) {} TreeNode(T data, TreeNode * left, TreeNode * right) : _data(data), _parent(nullptr), _left(left), _right(right) {} TreeNode(T data, TreeNode * parent, TreeNode * left, TreeNode * right) : _data(data), _parent(parent), _left(left), _right(right) {} }; /* Бинарное дерево поиска без повторений. */ template struct BinSearchTree { TreeNode * _root; private: /* Вспомогательная функция для функции insert. */ void insert(TreeNode * current_node, TreeNode * parent, T value) { if (!current_node) { current_node = new TreeNode(value, parent); return; } if (value < current_node->_data) insert(current_node->_left, current_node, value); else if (value > current_node->_data) insert(current_node->_right, current_node, value); } /* Вспомогательная функция для функции print. */ void print(TreeNode * node) { if (!node) return; print(node->_left); std::cout << node->_data << ' '; print(node->_right); } public: BinSearchTree() : _root(nullptr) {} BinSearchTree(TreeNode * root) : _root(root) {} BinSearchTree(T data) : _root(new TreeNode(data)) {} /* Печатает содержимое дерева на экран по возрастанию (ЛКП).*/ void print() { if (!_root) return; print(_root->_left); std::cout << _root->_data << ' '; print(_root->_right); } /* Вставляет элемент в БДП. */ void insert(T value) { if (!_root) { _root = new TreeNode(value); return; } if (value < _root->_data) insert(_root->_left, _root, value); else if (value > _root->_data) insert(_root->_right, _root, value); // std::cout << _root->_right; } }; #endif /* __BST */