Binary Search Tree,BST,又称为二叉查找树、二叉排序树。
特点:任何一个结点的值都大于其左子树的全部结点的值,任何一个结点的值都小于其右子树的全部结点的值。
二叉搜刮树匀称时间复杂度可以认为是树的高度 O ( h ) O(h) O(h)。理论上,二叉搜刮树的查询、插入和删除操纵的时间复杂度均为 O ( l o g N ) O(logN) O(logN)。极端环境下,高度达到最大时,二叉搜刮树退化成链表,此时查询、插入和删除元素,时间复杂度变成 O ( N ) O(N) O(N)。
均衡二叉搜刮树
为了办理极端环境下二叉搜刮树退化成链表的问题,引入旋转操纵维护树的均衡。
Balanced Binary Search Tree(BBST,均衡二叉搜刮树),也叫Balanced Binary Tree(BBT,均衡二叉树),包罗AVL树和红黑树。
定义:它是一棵空树或它的左右两个子树的高度差的绝对值不超过1,而且左右两个子树都是一棵均衡二叉树。当时间复杂度为 O ( l o g N ) O(logN) O(logN);
均衡,Balance,即当结点数量固定时,左右子树的高度越靠近,这棵二叉树越均衡,即高度越低。最理想的均衡就是完全二叉树/满二叉树,高度最小的二叉树。
遍历
Red Black Tree,一种自均衡的二叉搜刮树(Self Balancing Binary Search Tree),又叫均衡二叉B树(Symmetric Binary B-tree)。
定义:红黑树是一种含有红黑结点,并能自均衡的二叉查找树。插入,删除,查找的复杂度都是 O ( l o g N ) O(logN) O(logN)
满足二叉搜刮树的性子外,还要满足如下性子:
AA树是一种用于高效存储和检索有序数据的均衡树形布局,Arne Andersson教授于1993年在其论文Balanced Search Trees Made Simple中介绍,筹划的目标是减少红黑树考虑的差别环境。AA树的查找,插入和删除等操纵的时间复杂度都是 O ( l o g N ) O(logN) O(logN)。
AA树是红黑树的一种变体,与红黑树差别,AA树上的红色结点只能作为右子结点。AA树模仿2-3树,从而极大地简化维护操纵。红黑树的维护算法需要考虑七种差别的环境来精确均衡树。因为红色结点只能作为右子结点,AA树只需要考虑两种环境。
AVL树
引出一个新的查找树布局:多路查找树,一颗均衡多路查找树,可使得数据的查找服从保证在 O ( l o g N ) O(logN) O(logN)时间复杂度。
Balanced Tree,一种均衡的多路搜刮(查找,排序)树,多用于文件系统、数据库的实现。有些资料也叫B-树(对应的英文是B-Tree),实际上是同一种数据布局。
B树的阶:全部结点的孩子结点的最大值。
一个 m m m阶( m ≥ 2 m≥2 m≥2)的B树特点如下:
全部叶子结点都在同一层级;
每一个结点最多有 m m m个子结点;
如果根结点不是叶子结点,则它至少有两个子结点;
有 k k k个子结点的非叶子结点拥有 k − 1 k−1 k−1个键;
每一个非叶子结点(除根结点)最少有 ⌈ m / 2 ⌉ ⌈m/2⌉ ⌈m/2⌉个子结点,也就是中间结点最少有 ⌈ m / 2 ⌉ ⌈m/2⌉ ⌈m/2⌉个子结点。
两个取整:
Ceiling:向上取整,指的是取比自己大的最小整数,用数学符号 ⌈ ⌉ ⌈⌉ ⌈⌉表现;
Floor:向下取整,指的是取比自己小的最大整数,用数学符号 ⌊ ⌋ ⌊⌋ ⌊⌋表现。
假设一个结点存储的元素个数为 x x x,则如果这个结点是:
根结点: 1 ≤ x ≤ m − 1 1≤x≤m-1 1≤x≤m−1
非根结点: ⌈ m / 2 ⌉ − 1 ≤ x ≤ m − 1 ⌈m/2⌉-1≤x≤m-1 ⌈m/2⌉−1≤x≤m−1
2-3树,是指每个具有子结点的结点(内部结点,Internal Node),要么有2个子结点和1个数据元素,要么有3个子结点和2个数据元素的自均衡的树,全部叶子结点都具有雷同的高度。即,2-3树的非叶子结点都具有两或三个分支。
空间复杂度为 O ( N ) O(N) O(N),搜刮、插入、删除等操纵的时间复杂度都是 O ( l o g N ) O(logN) O(logN)。
2-3树把数据存储在叫做元素的单独单位中,元素组合成结点。有2结点和3结点两种。
2结点:包罗1个元素和2个子结点
2-3-4树是有序的:每个元素必须大于或即是它左边的和它的左子树中的任何其他元素。每个子结点因此成为由它的左和右元素界定的一个区间。
2-3-4树的空间复杂度为 O ( N ) O(N) O(N),搜刮、插入、删除等操纵的时间复杂度都是 O ( l o g N ) O(logN) O(logN)。
2-3-4树在多数编程语言中实现起来相对困难,因为在树上的操纵涉及大量特殊环境。红黑树实现起来更简单一些,可用它来替代。
2-3-4树是红黑树的一种等同,这意味着它们是等价的数据布局。对于每个2-3-4树,都存在着至少一个数据元素是雷同序次的红黑树。在2-3-4树上的插入和删除操纵也等价于在红黑树中的颜色翻转和旋转。这使得它成为理解红黑树背后逻辑的紧张工具。
B+树
Huffman Tree,最优二叉树,是一种带权路径长度最短的二叉树。树的带权路径长度,就是树中全部的叶结点的权值乘上其到根结点的路径长度(若根结点为0层,叶结点到根结点的路径长度为叶结点的层数)。树的路径长度是从树根到每一结点的路径长度之和,记为 W P L = ( W 1 ∗ L 1 + W 2 ∗ L 2 + W 3 ∗ L 3 + . . . + W n ∗ L n ) WPL=(W1*L1+W2*L2+W3*L3+...+Wn*Ln) WPL=(W1∗L1+W2∗L2+W3∗L3+...+Wn∗Ln), N N N个权值 W i ( i = 1 , 2 , . . . , n ) Wi(i=1,2,...,n) Wi(i=1,2,...,n)构成一棵有N个叶结点的二叉树,相应的叶结点的路径长度为 L i ( i = 1 , 2 , . . . , n ) Li(i=1,2,...,n) Li(i=1,2,...,n)。可证实霍夫曼树的WPL是最小的。
哈夫曼编码就是哈夫曼树的应用。
决策树