二叉查找树(C语言实现)创建、增加节点、删除节点、查找前趋和后继、查找节点、遍历

二叉查找树满足以下性质:若x为根(树或者子树),若y是x的左子树上的节点,则value(y)<value(x),若y是x的右子树上的节点,则value(y)>value(x)。

使用二叉查找树进行查找时,平均的查找时间为O(lgn),最坏的查找时间为O(n)。

根据二叉树的定义可以得出以下结论:

(1)对二叉查找树进行中序遍历会得到一个有序的序列。 

(2)若二叉查找树中的某个结点有两个子女,则其后继没有左子女,其前趋没有右子女。

二叉查找树结构体定义:

typedef struct binary_search_tree{
    struct binary_search_tree* left;//左孩子
    struct binary_search_tree* right;//右孩子
    struct binary_search_tree* parent;//父节点
    int value;//数据,可以引申为结构体,但需要提供不同的算法
}binary_search_tree;

 为了加强对C语法的掌握度,笔者在刚开始时,使用函数指针结构体,后面为了减少复杂程度,去除了对函数指针的使用。函数指针结构体:

typedef struct operation_binary_search{
    binary_search_tree* (*binary_search_tree_create)(binary_search_tree* T,int* value_array,int array_length,struct operation_binary_search*operation);//创建
    binary_search_tree* (*binary_search_tree_insert)(binary_search_tree* T,int key);//插入
    void (*print_binary_tree_value)(binary_search_tree*T);//遍历
}operation_binary_search;

在程序中,将一些基本操作定义为了宏,但这是在书写代码过程中才使用的,有部分代码未使用这些宏。

宏的定义:

#define LEFT(T) T -> left //左子树
#define RIGHT(T) T -> right //右子树
#define PARENT(T) T -> parent //父节点

1.插入新的节点

此处使用两种方法进行实现,递归和迭代。思路是:若比根节点大,则向右走;比根节点小,向左走;直到走到叶子(即NULL)。

递归方式:

binary_search_tree* binary_search_tree_insert_Recuision(binary_search_tree* T,int key){
    if(T == NULL){//找到位置
  • 1
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值