上一节咱们已经说过了,树的深度越深,时间复杂度也就越高。所以我们要想办法让树的深度尽量的小。
所以就产生了平衡二叉树这种东西。
平衡二叉树(AVL):是一种特殊的排序二叉树,其左右子树都是平衡二叉树,且左右子树的高度之差的绝对值不超过1,一句话表述就是:以树中所有节点的根为树的左右子树的高度只差的绝对值不超过一。
原来的时候我们有一颗很平衡的二叉树,但是现在我们进行插入元素操作就会破坏原先的二叉树使其的左右子树的深度绝对值差不是小于等于一了。
所以---我们今天就是解决这个问题的,现在开始正课
---------------------平衡二叉树的调整--------------------
在我们平衡二叉树的时候要注意的一件很重要的事情是,不论我们怎样操作,都需要保证在操作之后,二叉树还是搜索二叉树。否则就没用了。
不平衡的“被破坏者”是mar,“破坏者”是nov,nov在被破坏者右子树的右边,所以该插入称为RR插入,需要RR旋转
(右单旋)
我们首先进行正常的插入操作然后找出破坏者和被破坏者。
然后开始发现关系破坏者在被破坏者右子树的右子树上所以称为RR旋转。
这个的话也是RR旋转
下面附上LL旋转
附上 最操蛋的LR旋转。
然后是RL旋转
上面说了四种旋转方式分别是RR,LL,RL,LR。所有的旋转都可以分成这四类,在我们进行平衡二叉树这个操作的时候,我们就需要看被破坏者和破坏者之间的关系,根据他们的关系去调整 被破坏者到破坏者的沿途三个节点。即可。。。。。。