Я работаю над библиотекой дерева двоичного дерева C, и я пытаюсь написать функцию, которая удалит правый узел древовидного дерева. Вот структура моего дерева:Удалить правый узел правого поддерева дерева двоичного поиска (C)
struct Node {
int value;
struct Node *left;
struct Node *right;
};
typedef struct Node TNode;
typedef struct Node *binary_tree;
Дерево создается следующим образом:
binary_tree NewBinaryTree(int value_root) {
binary_tree newRoot = malloc(sizeof(TNode));
if (newRoot) {
newRoot->value = value_root;
newRoot->left = NULL;
newRoot->right = NULL;
}
return newRoot;
}
Добавление элемента к нему:
void Insert(binary_tree *tree, int val) {
if (*tree == NULL) {
*tree = (binary_tree)malloc(sizeof(TNode));
(*tree)->value = val;
(*tree)->left = NULL;
(*tree)->right = NULL;
} else {
if (val < (*tree)->value) {
Insert(&(*tree)->left, val);
} else {
Insert(&(*tree)->right, val);
}
}
}
Функция я написал, чтобы удалить правый узел поддерево выглядит следующим образом:
void delrightsubtree(binary_tree *tree){
if((*tree)->value!=NULL)
{
free(&(*tree)->right);
delrightsubtree(&(*tree)->right);
}
else
{
printf("end");
}
}
Однако эта функция не работает, потому что она сбой при вызове этой функции (после добавления нескольких элементов в дерево). Я не знаю, как это сделать.
Спасибо!
Возможный дубликат [Удалить узел из двоичного дерева C без испортить его] (http://stackoverflow.com/questions/41092850/delete-node-from-ac-binary-tree-without-messing-it- up) – Olaf