先说说几种特殊树及其应用场景:
- AVL树:最早的平衡二叉树之一。应用相对其他数据结构比较少。windows对进程地址空间的管理用到了AVL树。
- 红黑树:平衡二叉树,广泛用在C++的STL中。map和set都是用红黑树实现的。参见博客:http://blog.youkuaiyun.com/v_JULY_v/article/details/6105630
- B/B+树:用在磁盘文件组织、 数据索引和数据库索引。
- Trie树:字典树,用在统计和排序大量字符串。
基本概念
AVL树本质上还是一棵二叉搜索树。
递归定义:
- 左右子树均为AVL树
- 左右子树的高度差的绝对值不超过1
提出AVL的背景:
当二叉查找树的节点序列为:1,2,3,4,5,6时,其树结构等同于一个链表。查找一个结点的时间复杂度是O(N),而AVL树的查找平均时间复杂度是O(logN)。
AVL树查找、插入和删除在平均和最坏情况下都是O(log n)。查找和删除可能需要通过一次或多次树旋转来重新平衡这个树。平衡调整过程主要包含四种旋转操作:LL,LR,RR,RL 。