关闭

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

958人阅读 评论(0) 收藏 举报
分类:

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

二叉搜索树(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树等等众多的树。感觉心好累,让我静静先~还是遇到实际的应用场景,需要用啥再研究吧~


0
0

查看评论
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
    个人资料
    • 访问:135217次
    • 积分:3051
    • 等级:
    • 排名:第11535名
    • 原创:174篇
    • 转载:17篇
    • 译文:5篇
    • 评论:22条
    我的Github地址
    最新评论