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

概念

二叉搜索树

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

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

与查找性能相同。

原文地址:https://www.cnblogs.com/semiprimenumber/p/13874143.html