数据结构设计
#define BST_NODE_CHILD 0
#define BST_NODE_PARENT 1
//bst的节点
typedef struct bst_node
{
//关键字
int key;
//左孩子
bst_node* left;
//右孩子
bst_node* right;
}bst_node;
//bst树
typedef struct bst
{
//树的节点
struct bst_node* root;
//记录树的节点数目
int size;
}bst;
接口设计
//创建一个空的二叉搜索树
bst* bst_create();
//创建一个bst的节点
bst_node* bst_create_node(int key);
//查找节点(type为选择查找目标的父节点还是本身);
bst_node* bst_search_node(bst_node* node, int type, int key);
//搜索子树中最大节点或其父节点
bst_node* bst_find_max_node(bst_node* node, int type);
//插入节点
bst* bst_insert_node(bst* bst, int key);
//删除节点
void bst_delete_node(bst* bst, int key);
//中序遍历
void bst_inorder_traversal(bst_node* node);
测试
int main()
{
bst* bst = bst_create();
int arr[] = {
21,3,5,26,29,50,18,53,8,67,1,78,6 };
int length = sizeof(arr) / sizeof(int);
for (int i = 0; i < length; i++)
{
bst_insert_node(bst, arr[i]);
printf("size:%d ", bst->size