二叉查找树

二叉查找树是所有结点的左孩子都不大于该结点,右孩子都不小于该结点的二叉树,这里介绍一下相关的操作和时间复杂度


  1. 按顺序遍历
    基于上面介绍的二叉查找树的特点,很容易看出来只要对树进行中序遍历,即先左子树,再根结点,最后右子树的顺序输出,就能得到由小到大排序的结点列表。
    遍历所需时间为O(n)

  2. 查询二叉查找树
    还是基于二叉查找树的特性,要查询key值的元素,首先比较它和根结点的大小,如果正好等于根结点的值,那么直接就找到了,如果比根结点的值小的话,就递归左子树查找,否则递归右子树,实在找不到就返回一个找不到的下标就好了。
    根据以上思路,可以得出,不管有没有找到,最坏的情况就是由上而下地走完树的高度,所以该操作所用时间为O(树的高度)

  3. 查找最大/最小元素
    最大元素即右子树最右边的结点,最小的元素即左子树最左边的结点
    同上,算法的运行时间最多就是走完树的高度,所以运行时间也是O(树的高度)

  4. 查找前驱和后继元素
    这个个人看法和《《算法导论》》中的有些不同,待确认后再补上

  5. 插入元素
    首先和根元素比较,如果比根元素小的话,则考虑插在跟元素的左子树下,如果比根元素大的话,则考虑插在跟元素的右子树下,如果相等的话就无所谓了,哪边都行,这样递归下去直至想要插入的位置为空,那么就插在那里就ok了
    运行时间O(树的高度)

  6. 删除元素
    这里要分三种情况:
    *要删除的结点没有孩子:如果该结点有父节点的话就删除要删除的结点,然后在该父节点那将该结点原本的位置指针置为空就好
    *要删除的结点只有一个孩子:要让该结点的孩子顶替它之前的位置
    *要删除的结点有两个孩子:删除该结点的后继结点y(该结点一定至多有一个子女,所以这一步可使用上面那种情况的方法),然后,用y的关键字值替换掉z的关键字
    运行时间O(树的高度)
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值