zoukankan      html  css  js  c++  java
  • 算法与数据结构笔记(三)平衡二叉树

    概念

    二叉搜索树

    二叉搜索树又称二叉查找树,亦称为二叉排序树。设x为二叉查找树中的一个节点,x节点包含关键字key,节点x的key值记为key[x]。如果y是x的左子树中的一个节点,则key[y] <= key[x];如果y是x的右子树的一个节点,则key[y] >= key[x]

    二叉搜索树的特性

    • 若左子树不空,则左子树上所有节点的值均小于它的根节点的值
    • 若右子树不空,则右子树上所有节点的值均大于它的根节点的值
    • 左、右子树也分别为二叉搜索树

    二叉搜索树的查找

    • 如果树是空的,则查找结束,无匹配。
    • 如果被查找的值和节点的值相等,查找成功。
    • 如果被查找的值小于节点的值,递归查找左子树
    • 如果被查找的值大于节点的值,递归查找右子树
    二叉搜索树的查找性能

    当数据的数目为N,树的高度近似logN时,其查找性能的时间复杂度为O(logN)。当先后插入的key有序时,二叉搜索树退化为单分支的树结构,此时树的高度与数据的数目相同,因此该情况下查找平均时间复杂度退化为O(N)。

    二叉搜索树的插入

    • 执行查找流程,此时
      • 如果已经存在则不进行插入
      • 如果不存在则插入到查找结束的位置
    二叉搜索树的插入性能

    与二叉搜索树的查找效率相同

    二叉搜索树的删除

    删除节点为叶子节点

    只需查找到该节点,直接删除即可

    删除的节点只有左子树

    删除的节点若只有左子树,将节点的左子树替代该节点位置

    删除的节点只有右子树

    删除的节点若只有右子树,将节点的右子树替代该节点位置

    删除的节点既有左子树又有右子树
    • 遍历待删除节点的左子树,找到其左子树中的最大节点,即删除节点的前驱节点
    • 将最大节点代替被删除节点
    • 删除左子树中的最大节点
    • 左子树中待删除最大节点一定为叶子节点或者仅有左子树
    • 递归执行以上过程
    删除性能

    删除节点时,如果节点为叶子结点,或者结点只有单一子树,则时间复杂度为O(1)。若结点既有左子树又有右子树,则需要进行递归,此时的时间复杂度为O(logN)。

    平衡因子

    某节点的左子树与右子树的高度(深度)差即为该节点的平衡因子

    平衡二叉树

    二叉搜索树一定程度上可以提高搜索效率,但是当原序列有序,构造的二叉搜索树可能退化为单链表,此时搜索效率降低为O(N)。平衡二叉树保证节点平衡因子的绝对值不超过1,保证了树的平衡。

    平衡二叉树的查找性能

    最坏情况下其时间复杂度为T(logN),因此我们认为平衡二叉树的查找性能为O(logN)。

    平衡二叉树的插入和删除性能

    与查找性能相同。

  • 相关阅读:
    变量
    词频统计
    Python文件处理
    python面试题
    函数及组合数据类型
    位(bit)、字节(byte)、字符、编码之间的关系
    程序的控制结构
    Python:turtle库的使用及图形绘制
    Dynamics 365 CRM Connected Field Service 不能接收IoT Alert
    Dynamics 365 CRM 部署 Connected Field Service
  • 原文地址:https://www.cnblogs.com/semiprimenumber/p/13874143.html
Copyright © 2011-2022 走看看