自平衡方式--旋转

耗尽温柔 提交于 2019-11-28 08:27:57
关键字:AVL、插入、删除
前言:  平衡二叉树和AVL树这两个概念的区分:平衡二叉树是对这样一种数据结构的定义,是一种描述;而AVL树则是对这样子一种数据结构的实现。同红黑树和B树等一样,都是对这样一种结构的实现,同时都是具有自平衡特性的。  AVL树是最早的被发明的自平衡二叉树

1、定义:
  ①左子树和右子树都是AVL树
  ②左子树和右子树的高度差不能超过1
 
2、性质:
  ①一棵n个结点的AVL树的其高度保持在0(log2(n)),不会超过3/2log2(n+1)
  ②一棵n个结点的AVL树的平均搜索长度保持在0(log2(n)).
  ③一棵n个结点的AVL树删除一个结点做平衡化旋转所需要的时间为0(log2(n)).
 
3、AVL树添加新节点:
(1)找到插入节点的位置,然后插入节点
(2)"插入修复":首先确定不平衡起始点,然后按照自平衡的旋转策略(左旋、右旋)进行相应的操作(详见:自平衡方式--旋转
 
4、AVL树删除节点:
(1)找到替换节点。
  ①如果删除节点是叶子节点,那么替换节点就是NULL;
  ②如果删除节点有一个子节点,那么替换节点就是其左子节点或者右子节点;(如果删除节点有一个子节点,那么这个子节点肯定是叶子节点,要满足AVL严格平衡的特性。)
  ③如果删除节点有两个孩子,那么中序遍历的后继节点就作为替换节点
(2)将替换节点与删除节点交换。(注意:替换时本质上就是交换一下两个节点的值,两个节点原来的位置还是不变的。)
(3)删除操作:
  ①判断删除此时的替换节点之后,哪个节点会导致不平衡。确定不平衡起始点,然后按照旋转策略(详见:自平衡方式--旋转)进行相应的操作,确保删除当前节点之后树还是平衡的。
  ③经过第一步的调整,保证在删除节点之后树还是平衡的情况下,再删除节点。
 

AVL树&&红黑树:
①由于AVL树是要保证严格平衡的,所以对于插入和删除,会比红黑树慢,因为红黑树只是要求相对平衡;
②由于AVL树是要保证严格平衡的,所以在一定的情况下,在AVL树中进行查找会比在红黑树中快。

 
 
标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!