|
@@ -13,6 +13,7 @@ struct bt_node_t
|
|
|
struct bt_root_t
|
|
|
{
|
|
|
struct bt_node_t *bt_node;
|
|
|
+ int32_t size; // 树中的元素个数
|
|
|
int (*cmp)(struct bt_node_t *a, struct bt_node_t *b); // 比较函数 a>b 返回1, a==b返回0, a<b返回-1
|
|
|
/**
|
|
|
* @brief 释放结点的value的函数
|
|
@@ -26,9 +27,10 @@ struct bt_root_t
|
|
|
*
|
|
|
* @param node 根节点
|
|
|
* @param cmp 比较函数
|
|
|
+ * @param release 用来释放结点的value的函数
|
|
|
* @return struct bt_root_t* 树根结构体
|
|
|
*/
|
|
|
-struct bt_root_t *bt_create_tree(struct bt_node_t *node, int (*cmp)(struct bt_node_t *a, struct bt_node_t *b));
|
|
|
+struct bt_root_t *bt_create_tree(struct bt_node_t *node, int (*cmp)(struct bt_node_t *a, struct bt_node_t *b), int (*release)(void *value));
|
|
|
|
|
|
/**
|
|
|
* @brief 创建结点
|
|
@@ -57,4 +59,21 @@ int bt_insert(struct bt_root_t *root, void *value);
|
|
|
* @param ret_addr 返回的结点基地址
|
|
|
* @return int 错误码
|
|
|
*/
|
|
|
-int bt_query(struct bt_root_t *root, void *value, uint64_t *ret_addr);
|
|
|
+int bt_query(struct bt_root_t *root, void *value, uint64_t *ret_addr);
|
|
|
+
|
|
|
+/**
|
|
|
+ * @brief 删除结点
|
|
|
+ *
|
|
|
+ * @param root 树根
|
|
|
+ * @param value 待删除结点的值
|
|
|
+ * @return int 返回码
|
|
|
+ */
|
|
|
+int bt_delete(struct bt_root_t *root, void *value);
|
|
|
+
|
|
|
+/**
|
|
|
+ * @brief 释放整个二叉搜索树
|
|
|
+ *
|
|
|
+ * @param root
|
|
|
+ * @return int
|
|
|
+ */
|
|
|
+int bt_destroy_tree(struct bt_root_t *root);
|