二叉查找树

定义: 

        二叉查找树是一种二叉树数据结构,其任意节点的值大于其左子树所有节点,且小于右子树所有节点。支持多种动态集合上的操作,主要有查找、最大值、最小值、前驱、后继、插入和删除,这些操作都可以在O(n )时间复杂度内完成,其中n为二叉树的高度。

 

操作:

        查找:从根节点开始搜索,若查找值等于根节点值,则命中,若小于根节点值,则递归搜索左子树,否则递归搜索右子树;

        最大值:查找二叉树最右侧的节点;

        最小值:查找二叉树最左侧的节点;

        前驱:若查询节点左子树不为空,则前驱为左子树的最大值,若左子树为空,则前驱为小于查询节点的最低祖先节点;

        后继:若查询节点右子树不为空,则后继为右子树的最小值,若右子树为空,则后继为大于查询节点的最低祖先节点;

        插入:从根节点开始搜索,若根节点为空,则插入当前值,若当前值不大于根节点值,则递归搜索左子树,否则递归搜索右子树;

        删除:删除在二叉树操作比较麻烦,因为删除节点后会破坏二叉树,要设法恢复。若删除节点左子树右子树都为空,则直接删除节点。若删除节点只有左子树为空或只有右子树为空,节点子树链接到节点父节点,然后删除节点。若删除节点左子树右子树都不为空,则搜索节点的后继节点,将后继节点值移当前节点。

 

        随机构造的二叉树期望高度为lg(n),所以期望时间复杂度为O(lg(n)),但理论上最坏时间复杂度可能会达到O(n)。所以实际应用中为了达到稳定的时间复杂度O(lgn),都会构造平衡的二叉树,可以保证在最坏的情况下,操作的时间复杂度也为O(lg(n))。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值