关于树的总结从二叉树->二叉搜索树->平衡二叉树->红黑树->B树与B+树

二叉树的定义与性质,包括各种操作的源代码在本博客的的此处:二叉树

二叉搜索树(Binary Search Tree)的定义性质以及源码实现在本博客此处:二叉搜索树

平衡二叉树(AVL树),是一棵完全二叉树(PS:关于满二叉树与完全二叉树可以在堆排序中看到定义),其性质以及源代码的实现在本博客此处:平衡二叉树

红黑树,是花时间最久理解的一个东西,只理解了其中的原理,其应用最经典的及时本博客前面讲的Apache与Nginx的区别里面提到的epoll,epoll就是采用红黑树的思想实现的,这里稍微提下红黑树用在epoll的什么地方。

epoll在被内核初始化时(操作系统启动),同时会开辟出epoll自己的内核高速cache区,用于安置每一个我们想监控的socket,这些socket会以红黑树的形式保存在内核cache里,以支持快速的查找、插入、删除。这个内核高速cache区,就是建立连续的物理内存页,然后在之上建立slab层,简单的说,就是物理上分配好你想要的size的内存对象,每次使用时都是使用空闲的已分配好的对象。

关于红黑树的定义及其插入删除操作在本博客此处:红黑树

B树与B+树,已经不属于二叉树的范围,一个根可以有多个分支,这些主要用在数据库(如Oracle的数据库采用B+树实现)与文件系统(如ext2,可以看看下图ext2的布局)的实现。关于B树与B+树的一些理解在本博客此处:B与B+树


以上只是众多树种的几种,其实还有经典的最优二叉树(也就是在信息论里面曾经提到过的霍夫曼编码,也叫霍夫曼树)主要用于数据编码压缩。

还有B*树、LSM树、KD树、vp、R树、R*树、R+树、X树、M树、线段树、希尔伯特R树、优先R树等等众多的树。感觉心好累,让我静静先~还是遇到实际的应用场景,需要用啥再研究吧~


阅读更多
版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/xygl2009/article/details/46835675
个人分类: 算法与数据结构
想对作者说点什么? 我来说一句

没有更多推荐了,返回首页

不良信息举报

关于树的总结从二叉树->二叉搜索树->平衡二叉树->红黑树->B树与B+树

最多只允许输入30个字

加入CSDN,享受更精准的内容推荐,与500万程序员共同成长!
关闭
关闭