二叉搜索树

1.二叉树搜索树

1.1 数据结构

binary search tree是有序二叉树搜索树。

  • 每个节点只存储一个关键字
  • 非叶子结点存在两个指针,其关键字大于左子节点关键字,小于右子节点关键字

其特点是不平衡,树形结构的收到插入和删除节点的顺序影响,随机性很大。B树的深度为d log(n)<d< n,其搜索的时间复杂度是O(d),即最大是O(n),最小是O(log(n)),取决于树的形态。 通常实际应用中选用优化版本,平衡二叉树(即每个叶子结点高度相差小于1),平衡二叉树的搜索性能接近二分查找。
例如数字1-10按照 5、8、9、3、4、2、7、1、10、6顺序构建,结构如下:
在这里插入图片描述
当插入顺序是:1,2,3,4,5,6,7,8,9,10 时,此时其查询效率变成了线性搜索,其结构如下:
在这里插入图片描述

1.2 增删改查操作:

1.2.1查询
  1. 从根节点开始搜索;
  2. 如果目标关键字等于当前节点关键字,返回结果;
  3. 如果目标关键字小于当前节点关键字去左子树继续查找;
  4. 如果目标关键字大于当前节点关键字,去右子树查找;
  5. 当前节点关键字左右指针为空,返回无此关键字。
1.2.2插入
  1. 如果树是空树,插入节点作为根节点;
    空树直接插入5作为根节点
  2. 若子树指针为空,将子树指针指向目标节点,插入完毕。
    在这里插入图片描述在这里插入图片描述
  3. 如果目标关键字小于当前节点关键字,搜索其左子树;
    在这里插入图片描述
  4. 如果目标关键字大于或等于当前节点关键字,搜索其右子树;
    在这里插入图片描述
1.2.3删除
  1. 如果目标节点没有孩子节点,直接删除节点,将其父节点指针设置成空;
    例如下图删除1节点
    在这里插入图片描述在这里插入图片描述
  2. 如果目标节点只有左孩子,将其父节点指向目标节点的指针指向孩子节点,删除目标节点;
    例如下图删除10节点:
    在这里插入图片描述在这里插入图片描述
  3. 如果目标节点只有右孩子,将其父节点指向目标节点的指针指向孩子节点,删除目标节点;
    例如下图删除10节点
    在这里插入图片描述在这里插入图片描述
  4. 如果目标节点有两个孩子,为了保证树的平衡,需要挑选替代节点,可以挑选左子树最右节点,也可以挑选右子树最左节点。
    例如下图删除5节点,选取左子树最右节点4作为替代节点:
    在这里插入图片描述在这里插入图片描述
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值