简单说说二叉搜索树

目录:

  1. 什么是二叉搜索树
  2. 平衡二叉树
  3. 典型的平衡二叉树

1.什么是二叉搜索树

二叉树应该都不陌生,就像下面这副图展现的这样,是每一个结点最多有两个子树的树结构算法

二叉树

那么二叉搜索树就是以一颗二叉树来组织,可是又须要知足以下特性:post

1.对于任何节点x,其左子树的关键字<=x.key<=其右子树的关键字
2.在新增和删除关键字时也要知足如上特性
复制代码

二叉搜索树以下图所示: spa

二叉搜索树

什么是二叉搜索树咱们知道了,可是\color{red}{为何须要使用二叉搜索树呢}设计

按照通常的有序查找,好比链表,查找时间应该是线性的,O(n);
那么二叉搜索树呢,其与树的高度成正比,平均查找时间为O(lgn);
复制代码

因此咱们使用一颗搜索树,可以很大程度上节约查找时间,尤为是随着关键字的增多,效果越显著。3d

2.平衡二叉树

上面咱们说到二叉搜索树,红黑书实际上是它的变种,可是\color{red}{为何须要平衡二叉树呢}code

不得不说随机二叉搜索树的弊端,\color{red}{没法保证树构造的状况},好比: cdn

二叉树

若是如图中右侧所示,关键字来的顺序为(8, 10,11,12,13,15....),那么就会一直创建右侧子树,那么对于这颗二叉搜索树来讲,其查找效率并无比单纯的链表高,由于树高很高。
若是是左侧的构造方式,树高能保持必定的平衡,来保证查找效率。blog

3.典型的平衡二叉树

经常使用的有B树、红黑树、AVL等get

3.1 AVL

AVL是严格的二叉平衡树,平衡条件必须知足(全部节点的左右子树高度差不超过1);
 一旦不知足平衡,就须要进行调整
 因为维护这种高度平衡所付出的代价比从中得到的效率收益还大,故适用于插入删除不频繁,但查找要求较高的场合。
复制代码

3.2 红黑树

保证最坏的状况下基本动态集合操做的时间复杂度为O(lgn)
近似于平衡,要求没有AVL严格
有以下特性:
1.每一个节点只能要么是红色的,要么是黑色的
2.根节点和叶子节点是黑色的
3.若是一个节点是红色的,则它的子节点必须都是黑色的
4.对每一个节点,从该节点到其全部后代叶节点的简单路径上,均包含相同数目的黑色节点。
5.更新删除新增操做也必须保证如上特性
复制代码

红黑树

红黑树的应用很是普遍,好比C++的STL中,地图和集都是用红黑树实现的。it

3.3 B树

《B树一点都不神秘》一文中已经详细介绍过B树;

为磁盘或者其余直接存储的辅助存储设备设计
相似于红黑树,可是更下降磁盘操做I/O
节点分为内部节点(非叶子节点)和叶子节点
节点能够不止一个关键字
假设节点中的关键字个数为n,则该节点的孩子数必定是n+1
.....
复制代码

B树与红黑树的不一样之处在于B树的节点能够有不少孩子,从数个到数千个。因此B树的分支能够很是大; B树的高度也是O(lgn),可是呢,B树的严格高度要比红黑书的高度要小不少,由于B树能够有很大的分支因子,将树的高度拉低。

B树


其余相关章节
复制代码

算法相关文章之一:《简单说说二叉搜索树》
算法相关文章之二:《B树,一点都不神秘》
算法相关文章之三:《B树很简单,插入so easy》
算法相关文章之四:《什么是动态规划》

相关文章
相关标签/搜索