• 算法与数据结构笔记(三)平衡二叉树


    概念

    二叉搜索树

    二叉搜索树又称二叉查找树,亦称为二叉排序树。设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)。

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

    与查找性能相同。

  • 相关阅读:
    shell 函数用法
    shell read变量的读入
    利用系统函数模拟实现nginx 系统脚本启动的特殊颜色专业效果
    shell重定向介绍及使用
    监控MySQL或Web服务是否正常
    centos 6.5下安装nmap工具及简单用法
    if条件简单语法
    shell 的条件表达式及逻辑操作符简单介绍
    mysql常见的错误代码
    Linux MySql 安装与配置(二进制包)
  • 原文地址:https://www.cnblogs.com/semiprimenumber/p/13874143.html
Copyright © 2020-2023  润新知