From 31a9fdc3f778c1549138fe6985b2ba990e15964d Mon Sep 17 00:00:00 2001 From: ada-dmitry Date: Mon, 1 May 2023 15:46:57 +0300 Subject: [PATCH] add Trees --- gen/Trees/appTree | Bin 0 -> 16344 bytes gen/Trees/func.c | 127 ++++++++++++++++++++++++++++++++++++++++++ gen/Trees/head.h | 15 +++++ gen/Trees/main.c | 7 +++ gen/Trees/output/main | Bin 0 -> 43584 bytes 5 files changed, 149 insertions(+) create mode 100755 gen/Trees/appTree create mode 100644 gen/Trees/func.c create mode 100644 gen/Trees/head.h create mode 100644 gen/Trees/main.c create mode 100755 gen/Trees/output/main diff --git a/gen/Trees/appTree b/gen/Trees/appTree new file mode 100755 index 0000000000000000000000000000000000000000..144063f3bb692c22a247ee53a048cc38393c0353 GIT binary patch literal 16344 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 literal 0 HcmV?d00001 diff --git a/gen/Trees/func.c b/gen/Trees/func.c new file mode 100644 index 0000000..78293bb --- /dev/null +++ b/gen/Trees/func.c @@ -0,0 +1,127 @@ +#include +#include +#include "head.h" + +tree *init_root(tree *root, int field) // Выделение памяти под корень дереваnode +{ + tree *tmp = malloc(sizeof(tree)); // Присваивание значения ключу + tmp -> field = field;// Присваивание указателю на родителя значения NULL + tmp -> parent = NULL; // Присваивание указателю на левое и правое поддерево значения NULL + tmp -> left = tmp -> right = NULL; + root = tmp; + return root; +} + +tree *add_node(tree *root, int field) +{ + tree *root2 = root, *root3 = NULL; // Выделение памяти под узел дерева + tree *tmp = malloc(sizeof(tree)); // Присваивание значения ключу + tmp -> field = field; + while (root2 != NULL) + { + root3 = root2; + if (field < root2 -> field) + root2 = root2 -> left; + else + root2 = root2 -> right; + } + tmp -> parent = root3; // Присваивание указателю на левое и правое поддерево значения NULL + tmp -> left = NULL; + tmp -> right = NULL; + if (field < root3 -> field) root3 -> left = tmp; + else root3 -> right = tmp; + return root; +} + +tree *find_node(tree * root, int field) // Если дерево пусто или ключ корня равен искомому ключу, то возвращается указатель на корень +{ + if ((root == NULL) || (root -> field == field)) + return root; // Поиск нужного узла + if (field < root -> field) + return find_node(root -> left, field); + else return find_node(root -> right, field); +} + +// Минимальный элемент дерева +tree *minim(tree *root) +{ + tree *lef = root; + while (lef -> left != NULL) + lef = lef -> left; + return lef; +} + +// Максимальный элемент дерева +tree *maxim(tree *root) +{ + tree *rig = root; + while (rig -> right != NULL) + rig = rig -> right; + return rig; +} + +tree *findForDel(tree *root) +{ + tree *p = root, *lef = NULL; // Если есть правое поддерево, то ищем минимальный элемент в этом поддереве + if (p -> right != NULL) + return minim(p -> right); + lef = p -> parent; + while ((lef != NULL) && (p == lef -> right)) + { + p = lef; + lef = lef -> parent; + } + return lef; +} + +tree *del_node(tree *root, int field) +{ +// Поиск удаляемого узла по ключу + tree *p = root, *lef = NULL, *tmp = NULL; + lef = find_node(root, field); +// 1 случай: у узла нет потомков + if ((lef -> left == NULL) && (lef -> right == NULL)) + { + tmp = lef -> parent; + if (lef == tmp -> right) tmp -> right = NULL; + else tmp -> left = NULL; + free(lef); + } +// 2 случай: потомок один - поддерево справа + if ((lef -> left == NULL) && (lef -> right != NULL)) + { + tmp = lef -> parent; + if (lef == tmp -> right) tmp -> right = lef -> right; + else tmp -> left = lef -> right; + free(lef); + } +// 2 случай: потомок один - поддерево слева + if ((lef -> left != NULL) && (lef -> right == NULL)) + { + tmp = lef -> parent; + if (lef == tmp -> right) tmp -> right = lef -> left; + else tmp -> left = lef -> left; + free(lef); + } +// 3 случай: оба потомка + if ((lef -> left != NULL) && (lef -> right != NULL)) + { + tmp = findForDel(lef); + lef -> field = tmp -> field; + if (tmp -> right == NULL) + tmp -> parent -> left = NULL; + else tmp -> parent -> left = tmp -> right; + free(tmp); + } + return root; +} + +void print_tree(tree *root) +{ + if (root == NULL) + return; + if (root -> field) + printf("%d ", root -> field); + print_tree(root -> left); + print_tree(root -> right); +} \ No newline at end of file diff --git a/gen/Trees/head.h b/gen/Trees/head.h new file mode 100644 index 0000000..53eff76 --- /dev/null +++ b/gen/Trees/head.h @@ -0,0 +1,15 @@ +typedef struct tnode { + int field; + struct tnode *left; + struct tnode *right; + struct tnode *parent; +} tree; + +tree *init_root(tree *root, int field); +tree *add_node(tree *root, int field); +tree *find_node(tree * root, int field); +tree *minim(tree *root); +tree *maxim(tree *root); +tree *findForDel(tree *root); +tree *del_node(tree *root, int field); +void print_tree(tree *root); \ No newline at end of file diff --git a/gen/Trees/main.c b/gen/Trees/main.c new file mode 100644 index 0000000..6cbd9b8 --- /dev/null +++ b/gen/Trees/main.c @@ -0,0 +1,7 @@ +#include +#include +#include "head.h" + +int main(){ + return 126; +} \ No newline at end of file diff --git a/gen/Trees/output/main b/gen/Trees/output/main new file mode 100755 index 0000000000000000000000000000000000000000..083d9ab9bd5b7cb8c32e68c6d89de5809485b32f GIT binary patch literal 43584 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 NepP;^sz6oL`ak1tQQQCk literal 0 HcmV?d00001