我是一名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);
}
}
}
我的问题基本上是我可以删除一个左节点,然后&#34;链接&#34;链接到该左侧节点的其他节点(或叶子),因此树没有NULL叶子?例如:如果叶子4有2个孩子(left3和right8),那么删除叶子4,它将孩子left3和right8链接到上部节点(叶子4上面)。很难解释我试图尽我所能。
谢谢