树的遍历

 

先序:根,左,右

中序:左,根,右

后序:左,右,根

 

先序,中序,后序是指根的位置,左和右的位置是固定的。

 

完美二叉树(满二叉树):除了叶子结点之外的每一个节点都有两个孩子,每一层(当然包含最后一层)都被完全填充。

完全二叉树:除了最后一层之外的其他每一层都被完全填充,并且所有节点都保持向左对齐。

完满二叉树:除了叶子结点之外的每一个结点都有两个孩子结点。

 

二叉查找树也称为有序二叉查找树,满足二叉查找树的一般性质,是指一棵空树具有如下性质:

任意节点左子树不为空,则左子树的值均小于根节点的值

任意节点右子树不为空,则右子树的值均大于于根节点的值

任意节点的左右子树也分别是二叉查找树

没有键值相等的节点

 

在极端情况下,二叉查找树可能会退化成一个线性链。

 

 

AVL 树

 

AVL树是带有平衡条件的二叉查找树,和红黑树相比,它是严格的平衡二叉树,平衡条件必须满足(所有节点的左右子树高度差不超过1).不管我们是执行插入还是删除操作,只要不满足上面的条件,就要通过旋转来保持平衡,而旋转是非常耗时的

 

使用场景:

AVL树适合用于插入删除次数比较少,但查找多的情况。

 

AVL树特点:

AVL树是一棵二叉搜索树

AVL树的左右子节点也是AVL树

AVL树拥有二叉搜索树的所有基本特点

每个节点的左右子节点的高度之差的绝对值最多为1,即平衡因子为范围为[-1,1]

 

 

红黑树

一种自平衡二叉查找树, 通过对任何一条从根到叶子的路径上各个节点着色的方式的限制,红黑树确保从根到叶子节点的最长路径不会是最短路径的两倍,用非严格的平衡来换取增删节点时候旋转次数的降低,任何不平衡都会在三次旋转之内解决

使用场景:

红黑树多用于搜索,插入,删除操作多的情况下

原因:

红黑树的查询性能略微逊色于AVL树,因为比AVL树会稍微不平衡最多一层,也就是说红黑树的查询性能只比相同内容的AVL树最多多一次比较,但是,红黑树在插入和删除上完爆AVL树,AVL树每次插入删除会进行大量的平衡度计算,而红黑树为了维持红黑性质所做的红黑变换和旋转的开销,相较于AVL树为了维持平衡的开销要小得多

性质:

1.节点是红色或黑色。

2.根节点是黑色。

3.每个叶子节点都是黑色的空节点(NIL节点)。

4 每个红色节点的两个子节点都是黑色。(从每个叶子到根的所有路径上不能有两个连续的红色节点)

5.从任一节点到其每个叶子的所有路径都包含相同数目的黑色节点。

 

 

B树

B-树就是B树,-只是一个符号.

B树(B-Tree)是一种自平衡的树,它是一种多路搜索树(并不是二叉的),能够保证数据有序。同时它还保证了在查找、插入、删除等操作时性能都能保持在O(logn),为大块数据的读写操作做了优化,同时它也可以用来描述外部存储(支持对保存在磁盘或者网络上的符号表进行外部查找)

特点:

1.定义任意非叶子结点最多只有M个儿子;且M>2

2.根结点的儿子数为[2, M]

3.除根结点以外的非叶子结点的儿子数为[M/2, M]

4.每个结点存放至少M/2-1(取上整)和至多M-1个关键字;(至少2个关键字)

5.非叶子结点的关键字个数=指向儿子的指针个数-1

6.非叶子结点的关键字:K[1], K[2], …, K[M-1];且K[i] < K[i+1]

7.非叶子结点的指针:P[1], P[2], …, P[M],其中P[1]指向关键字小于K[1]的子树,P[M]指向关键字大于K[M-1]的子树,其它P[i]指向关键字属于(K[i-1], K[i])的子树

8.所有叶子结点位于同一层

 

 

B+树

B+树是B-树的变体,也是一种多路搜索树

B+的搜索与B-树也基本相同,区别是B+树只有达到叶子结点才命中(B-树可以在非叶子结点命中),其性能也等价于在关键字全集做一次二分查找;

B+的特性:

1.所有关键字都出现在叶子结点的链表中(稠密索引),且链表中的关键字恰好是有序的

2.不可能在非叶子结点命中

3.非叶子结点相当于是叶子结点的索引(稀疏索引),叶子结点相当于是存储(关键字)数据的数据层

4.更适合文件索引系统

原因: 增删文件(节点)时,效率更高,因为B+树的叶子节点包含所有关键字,并以有序的链表结构存储,这样可很好提高增删效率

B+ 树的优点:

1.层级更低,IO 次数更少

2.每次都需要查询到叶子节点,查询性能稳定

3.叶子节点形成有序链表,范围查询方便

 

B+树还有一个最大的好处,方便扫库,B树必须用中序遍历的方法按序扫库,而B+树直接从叶子结点挨个扫一遍就完了,B+树支持range-query非常方便,而B树不支持。这是数据库选用B+树的最主要原因。

 

 

 

https://www.jianshu.com/p/912357993486

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值