关于树的总结从二叉树->二叉搜索树->平衡二叉树->红黑树->B树与B+树
2015-07-10 23:01
323 查看
二叉树的定义与性质,包括各种操作的源代码在本博客的的此处:二叉树
二叉搜索树(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树等等众多的树。感觉心好累,让我静静先~还是遇到实际的应用场景,需要用啥再研究吧~
二叉搜索树(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树等等众多的树。感觉心好累,让我静静先~还是遇到实际的应用场景,需要用啥再研究吧~
相关文章推荐
- 数字电子技术碎片
- chunkAnalyse:C++下读取指定文件下的指定文件或文件
- 实时股票数据接口
- Genymotion Unable to load VirtualBox engine Genymotion启动失败解决办法
- 排列
- iOS 开发怎么入门?
- 区间不同数个数
- iOS中的copy ,kvc,kvo
- Java操作Oracle数据库
- 为什么对基础设施的监控变得如此重要?
- 设计模式---组合模式
- IOS开发常见面试题
- mbed TLS
- web缓存详解
- 记 Ubuntu14.04 Monodevelop 安装的两个问题
- SpringMVC学习笔记——Spring MVC与Struts2的区别2
- jQuery源码之ready()事件
- ionic cordova plugin for ios
- 实现mysql按月统计的教程
- SWING之JFrame