查找算法之二叉查找树

定义

一棵二叉查找树(BST)是一棵二叉树,其中每个节点都含有一个键且每个节点的键都大于其左子树中的任意节点的键而小于右子树的任意节点的键。

查找

从根节点开始查找,如果要查找的元素大于根节点,就在根节点的右子树中开始查找,如果要查找的元素小于根节点,就在根节点的左子树中进行查找。
从根节点开始,在每个节点中查找的进程都会递归地在它的一个子节点上展开,因此一次查找也就定义了树的一条路径。

插入

查找的简洁性是二叉树的重要特性之一。
当查找一个不存在于树中的节点并结束于一条空链接时,我们需要做的就是将链接指向一个含有被查找的键的新节点。

第一种情况,root为空,直接插入。
第二种情况,要插入的元素已经存在,则不再进行插入
第三种情况,能够找到合适的位置,
这里写图片描述

删除

开始需要判断要删除的节点是否存在于我们的树中,如果要删除的元素都不在树中,就直接返回false;否则,分为以下四种情况来分析。
1、要删除的节点无左右孩子
2、要删除的节点只有左孩子
3、要删除的节点只有右孩子
4、要删除的节点有左右孩子

  • 对于第一种情况,可以完全归为第二或第三种情况,就不用单独再写一部分代码进行处理。
  • 如果要删除的节点只有左孩子,那么就让节点的父节点指向该节点的左孩子,然后删除该节点

  • 如果要删除的节点只有右孩子,那么就让该节点的父节点指向该节点的右孩子,然后删除该节点

  • 如果要删除的节点的左孩子和右孩子都在,首先找到该节点的右子树中的最左孩子,就是右子树中最小的元素,然后他的值和要删除的节点的值进行交换,然后删除那个节点。

这里写图片描述

性能分析

这里写图片描述

参考资料:https://www.cnblogs.com/MrListening/p/5782752.html

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值