私は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