二叉树
- 满二叉树:
最后一层没有任何子节点。节点总数为2^n-1;n为树的高度。 - 完全二叉树:
所有节点按顺序从左往右与满二叉树相同。也就是说,如果把满二叉树从右至左、从下往上删除一些节点,剩余的结构就构成完全二叉树。 - 二叉搜索(排序、查找)树:
对二叉树进行中序遍历时,其输出是一个有序数组。但是容易形成单链表。 - 平衡二叉树(AVL)树:
即在二叉搜索树的基础上,子节点的高度差最大不超过1。 - 红黑树:
1.所有节点要么是红色要么是黑色。
2.根节点是黑色。
3.如果一个节点是红色,那么它的两个子节点都是黑色。
4.所有叶子节点会额外加一个黑色的null叶子节点。
5.从一个节点到该节点的子孙节点的所有路径上包含相同数目的黑节点。
如图为红黑树
二叉树的遍历:前序、中序、后序遍历。
前中后都是相对根节点而言的。
前序:先根节点,然后左子节点,后右子节点。
中序:先左子节点,然后根节点,后右子节点。(最常用)
后序:先左子节点,然后右子节点,后根节点。遍历遵循向下原则。
多路平衡查找树
B-树
- 有两个子节点的节点叫二节点,有三个子节点的叫三节点......
- 二节点要么有两个子节点,要么没有节点
三节点要么有三个子节点,要么没有节点
...
以此类推 - 所有叶子节点都在同一层;叶子节点的指针为空。
- 节点的权要求有序,且不重复
- 每个节点中的数据从左到右递增
- B-树中最大节点的数字成为B-树的阶,例如2-3树的阶为3
如图所示为一个3阶的B-树
B+树
B+树是B-树的优化版,在B-树的基础之上做了几点优化。
- 非叶子节点,不存储data。
- 叶子节点包含所有的节点字段。
- 叶子节点之间用指针连接,提高区间访问性。(支持范围查找)即所有叶子节点也组成一个有序链表。
如图为一个4阶的B+树
树的平衡:
所有平衡树都需要一个平衡的过程,即自旋。
平衡方法:切割法,即从最小的不平衡的子树开始旋转。