【发布时间】:2021-03-08 20:01:12
【问题描述】:
我很难理解我的书要我学习什么。我目前正在重新审视我多年前研究的一些算法和数据结构材料。其中一章是关于二叉搜索树及其应用等。这本书讨论了 BST(二叉搜索树)作为具有以下特性的节点的树:int data, node left, node right, node parent。我明白这一点,我已经实现了搜索功能。
现在的问题是:当我的参数是N* delete(Tree* tree, N* delete_node); 时,如何创建删除函数?
有很多递归函数,但它们依赖于我们递归传递节点指针和键值这一事实。这不是本书中的练习所要寻找的。我尝试过并且有效的方法示例是:source code for C Program for Insertion and Deletion in Binary Search Tree。不符合这些标准的另外两个重要来源是codezclub 和geeksforgeeks。他们解决了“删除”功能,但他们的功能在他们的功能中有其他参数。我的书指定
一个修改操作,给定一个指针 delete_node 指向一个 BST 树中的元素从 BST 树中删除 delete_node 并返回其指针。
函数声明:N* delete(Tree* tree, N* delete_node);
有人有什么想法吗?上面的源代码中还给出了最小可重复的示例,其中结构缺少“父”节点。以下是我对树和节点的定义:
typedef struct N {
int data;
struct N* left;
struct N* right;
struct N* parent;
} N;
typedef struct Tree {
N* root;
} Tree;
【问题讨论】:
标签: c binary-search-tree