【发布时间】:2016-12-12 00:56:24
【问题描述】:
我是一个使用 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);
}
}
}
我的问题基本上是我如何删除左节点,然后“链接”链接到该左节点的其他节点(或叶子),这样树就没有空叶子?例如:如果叶子 4 有 2 个子节点(left3 和 right8),则删除叶子 4,它将子节点 left3 和 right8 链接到上节点(叶子 4 上方)。很难解释我尽我所能。
谢谢
【问题讨论】:
-
网上有很多参考资料,告诉你在二叉搜索树中删除是如何发生的。先过一遍,或者refer here。
-
如果您还有问题,请尝试搜索答案。如果您仍然没有找到解决方案,请随时再次询问或评论堆栈溢出。编码愉快。
标签: c tree binary-tree binary-search-tree