数据结构-7.3查找

前言-数据结构

数据结构是需要反复咀嚼,不管什么时候都可以重中获取现在在开发中的遇到的问题答案。

树表查找

  • 是种动态查找
  • 方法1:二叉排序树查找
  • 方法2:平衡二叉树查找
  • 方法3: B-树 B+树

二叉排序树查找(二叉排序树查找:前提是将查找表组织成为一棵二叉排序树)

  • 思想
  • 若二叉排序树位空,则查找失败,否则,先拿根结点值与待查值进行比较,若相等,则查找成功,若根结点值大于待查值,则进入左子树重复此步骤,否则,进入右子树重复此步骤,若在查找过程中遇到二叉排序树的叶子结点时,还没有找到待找结点,则查找不成功
  • 举例过程
    在这里插入图片描述
  • 查找的性能分析
  • 在二又排序树查找中,成功的查找次数不会超过二叉树的深度,而具有n个结点的二叉排序树的深度,最多为log2n, 最坏为n。因此,二叉排序树查找的最好时间复杂度0(log2n),最坏的时间复杂度为0(n),一般情形下,其时间复杂度大致可看成0(log2n), 比顺序查找效率要好,但比二分查找要差。
  • 结论
    在这里插入图片描述

平衡二叉树排序树查找(平衡二叉树树查找)

  • 平衡二叉树查找:前提是首先要调整成一棵平衡二叉排序树。

  • 思想

  • 若平衡二又树为空,则查找失败,否则,先拿根结点值与待查值进行比较,若相等,则查找成功,若根结点值大于待查值,则进入左子树重复此步骤,否则,进入右子树重复此步骤,若在查找过程中遇到平衡二又树的叶子结点时,还没有找到待找结点,则查找不成功。

  • 举例过程

  • 第一步:调整成一 棵平衡二叉排序树
    ps:注意5这个结点,左边2棵树,取最深的3 - 右边2 = 1
    在这里插入图片描述

  • 非平衡二叉树的平衡处理

    • 若一棵二叉排序树是平衡二叉树,扦入某个结点后,可能会变成非平衡二叉树,这时,就可以对该二叉树进行平衡处理,使其变成一棵平衡二叉树。
    • 处理的原则应该是处理与扦入点最近的、而平衡因子又比1大或比1小的结点。下面将分四种情况讨论平衡处理。
  • 情况1: LL型的处理(左左型):注意 ABC 比如 1 8 17,8是中间数
    在这里插入图片描述

  • 情况2: LR型的处理(左右型)

    • 如下图,在C的左孩子A上扦入一个右孩子B,使的C的平衡因子由1变成了2,成为不平衡的排序树。这是的平衡处理为:将B变到A与C之间,使之成为LL型,然后按第(1)种情形LL型处理。
      在这里插入图片描述
  • 情况3:RR型的处理(右右型)

    • 如下图所示,在A的右孩子B上扦入一个右孩子C,使A的平衡因子由-1变成-2,成为不平衡的二叉排序树。这时的平衡处理为:将A逆时针旋转,成为B的左子树,而原来B的左子树则变成A的右子树待扦入结点C成为B的右子树。
      在这里插入图片描述
  • 情况4:RL型的处理(右左型)

    • 如下图所示,在A的右孩子C上扦入一个左孩子B,使A的平衡因子由1变成2,成为不平衡的二叉排序树。这时的平衡处理为:将B变到A与C之间, 使之成为RR型,然后按第(3)种情形RR型处理。
      在这里插入图片描述
  • 第二步:平衡二叉树查找

猜你喜欢

转载自blog.csdn.net/weixin_41732253/article/details/109735857
今日推荐