实习整理(十五)

上篇博文讲到了链表的相关操作,接下来讲讲有关树的相关知识,毕竟链表和树是笔试,面试的重点,这里只讲几种类型树的基本概念而已。。。

二叉查找树(B树)
查找树的定义非常简单,一句话就是左孩子比父节点小,右孩子比父节点大,还有一个特性就是”中序遍历“可以让结点有序。非常适合于范围查找。时间复杂度O(log(N)),在最坏的情况下会出现“链表”的形式,复杂度退化到O(N)

平衡二叉树(AVL)

二叉查找树的优化,父节点的左子树和右子树的高度之差不能大于1,也就是说不能高过1层,否则该树就失衡了,此时就要旋转节点。在编码时,我们可以记录当前节点的高度,比如空节点是-1,叶子节点是0,非叶子节点的height往根节点递增


Treap树
Treap树算是一种简单的优化策略,这名字大家也能猜到,树和堆的合体,其实原理比较简单,在树中维护一个"优先级“,”优先级“ 采用随机数的方法,但是”优先级“必须满足根堆的性质,当然是“大根堆”或者“小根堆”都无所谓

Splay树(伸展树)
伸展树的原理是”八二原则”,比如我要查询树中的“节点7”,如果我们是AVL的思路,每次都查询“节点7”,那么当这棵树中的节点越来越多的情况下就会呈现下旋,所以复杂度只会递增,伸展树的想法就是在第一次查询时树里面会经过一阵痉挛把“节点7”顶成“根节点”,操作类似AVL的双旋转,当我们再次查询同样的”数字7“时,直接在根节点处O(1)取出,当然这算是一个最理想的情况,有时痉挛过度,会出现糟糕的”链表“,也就退化了到O(N),所以伸展树讲究的是”摊还时间“,意思就是说在”连续的一系列操作中的平均时间“,当然可以保证是log(N)

Trie树(单词查找树/字典树/前缀树)
是一种用于快速检索的多叉树结构,如英文字母的字典树是一个26叉树,数字的字典树是一个10叉树。用于保存大量的字符串。优点:利用字符串的公共前缀来节约存储空间

B

二叉树,每个结点只存储一个关键字,等于则命中,小于走左结点,大于走右结点;

B-树:多路搜索树,每个结点存储M/2M个关键字,非叶子结点存储指向关键字范围的子结点;所有关键字在整颗树中出现,且只出现一次,非叶子结点可以命中;

B+树:在B-树基础上,为叶子结点增加链表指针,所有关键字都在叶子结点中出现,非叶子结点作为叶子结点的索引;B+树总是到叶子结点才命中;

B*树:在B+树基础上,为非叶子结点也增加链表指针,将结点的最低利用率1/2提高到2/3

以上是从师兄的笔记中借鉴而来的。。。


看了July的博客,提到了B树,红黑树,2-3-4树,虽然讲的不是很详细和透彻,但如果仅仅只是想要了解,这篇博客已经可以达到需求了

红黑树:自平衡二叉查找树,PS:以前一直认为自平衡树就是AVL树,现在发现并不是这样,AVL二叉平衡树是自平衡树的一种,因为左右子树的高度差的绝对值小于等于1,因此也是一种高度自平衡树
红黑树一般用来成为某些数据结构的底层实现结构,比如C++中set,map等容器的底层实现结构,因为它查找,插入以及删除的效率都比较高,时间复杂度为O(logn)(以2
为底),它和一般二叉树有一个区别是,节点不仅存储关键值,同时也要存储节点的颜色信息
性质:1.根节点为黑色;2.除根节点以为其他的节点为黑色或者红色;3.若某节点为红色,则其子节点都为黑色;4.任一节点到其所有叶节点所经过的路径中包含相同相同数目的黑节点;5.叶节点都为黑色;
红黑树的插入和删除,如果仅仅只是需要你画出示意图,我觉得记住这五个性质,对树进行调整就可以了,包括重新着色和旋转,但需要写出代码的话就还是需要有个规律了

B树(又称B-树):m阶多路自平衡树,它以及它的变型B+树或者B*树可以用来作为文件存储系统或者数据库索引(MySQL,MongoDB)的实现结构,因为查找,插入,删除效率高,所需的磁盘外设次数较少,时间复杂度为O(1+log(1+n/2))(以[m/2]为底)
[m/2] = 大于等于m/2的最小整数
性质:1.根节点至少有两个子节点;2.节点至少有[m/2]棵子树,最多有m棵子树;3.非终端节点的关键值的个数=它子树个数-1,即非终端节点的关键值的个数至少为[m/2]-1,最多为m-1;4.所有叶节点在同一层
B树的插入和删除我也是根据这几个性质来做的,对父节点进行合并或者分裂,如果代码实现的话估计会有点难度
B+树相对于B树来说为叶子节点增加了链表指针,且所有的关键值都在叶子节点中出现了,因此它的查找是一定要在叶子节点中结束的,而B树可以在非终端节点上结束,它和B树不同在于节点的关键值的个数=它子树个数
B*树在B+树的基础上为非终端节点增加了兄弟节点的链表指针,它和B+树不同在于节点至少有(2/3)m棵子树,因此说它的节点利用率提高了

B-树和B+树都支持顺序检索,但不是都支持随机检索,B+树支持随机检索,B-树不支持,B-树和B+树都可以用作文件索引结构

2-3-4树就是一棵特别的B树,它的子树的个数只能为2,3,4,其余的性质和B树一样

未完待续。。。


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值