Бинарные деревья - EcsFlash/DataTypes GitHub Wiki
тут
Исходный код -дерево
Дерево - этоСтруктура дерева
struct BinaryTree
{
int data;
BinaryTree* left, * right;
BinaryTree(int elem)
{
data = elem;
left = right = nullptr;
}
};
Создание пустого бинарного дерева
inline void initTree(BinaryTree*& root)
{
root = nullptr;
}
Создание бинарного дерева, содержащего один узел, по заданному элементу
BinaryTree(int elem)
{
data = elem;
left = right = nullptr;
}
Создание бинарного дерева по заданному корню и двум бинарным поддеревьями этого корня
inline void initTree(int elem,BinaryTree*& root,BinaryTree* rootLeft,BinaryTree* rootRight)
{
root = new BinaryTree(elem);
root->left = rootLeft;
root->right = rootRight;
}
Удаление бинарного дерева
inline void clear(BinaryTree*& root)
{
if (!isEmpty(root))
{
clear(root->left);
clear(root->right);
delete root;
root = nullptr;
}
}
Проверка на путоту
inline bool isEmpty(BinaryTree* root)
{
return root == nullptr;
}
Определение или изменение данных, записанных в корне бинарного дерева
inline int getRootdata(BinaryTree* root)
{
if (!isEmpty(root))
return root->data;
}
inline void setRootdata(BinaryTree* root, int elem)
{
if (!isEmpty(root))
{
root->data = elem;
}
}
Присоединение к корню бинарного дерева левого или правого дочернего узла
ЛЕВОЕ
inline bool attachLeftSon(BinaryTree* root, int elem) {
if (!isEmpty(root))
{
if (isEmpty(root->left))
{
root->left = new BinaryTree(elem);
return true;
}
else return false;
}
return false;
}
ПРАВОЕ
inline bool attachRightSon(BinaryTree* root, int elem)
{
if (!isEmpty(root))
{
if (isEmpty(root->right))
{
root->right = new BinaryTree(elem);
return true;
}
else return false;
}
return false;
}
Присоединение к корню бинарного дерева левого или правого поддерева
ЛЕВОЕ
inline bool attachLeftTree(BinaryTree* root, BinaryTree* leftSubTree)
{
if (!isEmpty(root))
{
if (isEmpty(root->left))
{
root->left = leftSubTree;
return true;
}
else return false;
}
return false;
}
ПРАВОЕ
inline bool attachRightTree(BinaryTree* root, BinaryTree* rightSubTree)
{
if (!isEmpty(root))
{
if (isEmpty(root->right))
{
root->right = rightSubTree;
return true;
}
else return false;
}
return false;
}
Отсоединение от корня бинарного дерева левого или правого поддерева
ЛЕВОЕ
inline BinaryTree*& detachLeftSubTree(BinaryTree* root)
{
BinaryTree* leftSubTree = root->left;
root->left = nullptr;
return leftSubTree;
}
ПРАВОЕ
inline BinaryTree*& detachRightSubTree(BinaryTree* root)
{
BinaryTree *rightSubTree = root->right;
root->right = nullptr;
return rightSubTree;
}
Вернуть копию левого или правого поддерева корня бинарного дерева
Тут мы используем простую функцию копирования и запихиваем ее в другие функции
inline BinaryTree* copyTree(BinaryTree* root) {
if (!isEmpty(root)) {
BinaryTree* newRoot = new BinaryTree(root->data);
newRoot->left = copyTree(root->left);
newRoot->right = copyTree(root->right);
return newRoot;
}
else {
return nullptr;
}
}
ЛЕВОЕ
inline BinaryTree*& copyLeftSubTree(BinaryTree* root)
{
if (!isEmpty(root))
{
BinaryTree* leftSubTree = copyTree(root->left);
return leftSubTree;
}
}
ПРАВОЕ
inline BinaryTree*& copyRightSubTree(BinaryTree* root) {
if (!isEmpty(root))
{
BinaryTree *rightSubTree = copyTree(root->right);
return rightSubTree;
}
}
Продолжение смотрите тут.По этой ссылке вы обуздаете весь кайф деревьев