平衡二叉树

平衡二叉树介绍:

平衡二叉树的全称叫平衡二叉搜索树,它首先是一棵二叉搜索树,且具有以下性质:它的左右两个子树的高度差的绝对值不超过1,并且左右两个子树都是一棵平衡二叉树。

对于一般的二叉搜索树,它的理想高度是为log2n,其各操作的时间复杂度(O(log2n))。但是,在某些极端的情况下(如:在插入的序列是有序的时),二叉搜索树将退化成近似单向链表,此时它的操作时间复杂度将退化成线性的,即O(n)。

我们可以通过随机化建立二叉搜索树来尽量的避免这种情况,但是在进行了多次的操作之后,由于在删除时,我们总是选择将待删除节点的后继代替它本身,这样就会造成总是右边的节点数目减少,以至于树向左偏沉。这同时也会造成树的平衡性受到破坏,提高它的操作的时间复杂度,而平衡二叉搜索树就可以弥补这个缺点。

如何把不平衡的二叉树调整为平衡二叉树:

我在检查二叉树是否平衡时,肯定是从叶子结点往根结点遍历,因此我们遇到的不平衡的二叉树有以下四种情况,分别是:

//1 解决方法:以B轴向右旋转
      A                           B
     / \                     /   \
    B   t1                  C     A
   / \                     / \   /  \
  C   t2                  t4 t3 t2  t1
 / \
t4   t3


//2 解决方法:先以C轴向左旋转,再以C为轴向右旋转
    A                A                 C
   / \              / \              /   \
  B   t1           C   t1          B      A  
 / \              / \             /  \   /  \
t2  C            B   t3          t2  t4 t3   t1
   / \          / \
  t4   t3      t2  t4
 
//3 解决方法:以B轴向左旋转
  A                 B        
 / \           /   \
t1  B         A     C
   / \       / \   / \
  t2  C     t1 t2 t3  t4
     / \
    t3   t4
    
//4 解决方法:以C轴向右旋转,再以C轴向左旋转
  A           A              C
 / \         / \           /   \
t1  B       t1  C         A     B
   / \         / \       / \   / \
  C   t4      t2  B     t1 t2 t3  t4
 / \              / \
t2   t3          T3  T4

平衡二叉树的优点:

避免二叉搜索树的单支状分布的情况,能让二叉搜索树以最佳的状态进行操作,时间复杂接近O(log2n)。

平衡二叉树的缺点:

平衡二叉树在创建、添加、删除时,为了让二叉树保持平衡需要进行大量的左旋、右旋、高度计算,所以平衡二叉树在创建时,添加、删除结点时速度比较慢。

因此平衡二叉树适合使用在数据量大且数据量稳定的情况,没有大量的添加、删除动作,大多数情况下都是进行查询操作。

红黑树与AVL树的区别:

1、AVL树在物理上就是平衡的,所以在创建、添加、删除时速度比较慢,但它的查询速度接近平衡二叉树的极限。

2、红黑树是一种特殊的AVL树,它的物理结构不是严格的平衡,而是接近平衡,从根结点所有的叶子结点的速度大致相同,它的非绝对平衡使用节约很多左旋、右旋的次数,因此它创建、添加、删除时速度比AVL树要快,查询速度接近AVL树。

线索二叉树

线索二叉树介绍:

我们在遍历二叉树时会得到一个线性的序列结果,但遍历的过程是非线性的(函数递归),该过程比较耗时,我们可以借助结点中的空的指针,增加一些线索,使用二叉树能够使用循环语句进行遍历,提高二叉树遍历的速度。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

wxj555281

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值