红黑树(Red Black Tree) - Flex实现
2013-03-26 10:39
465 查看
红黑树(Red Black Tree) - Flex实现
2011-12-06 19:51:50| 分类: 课程学习 | 标签:学习 算法 flex |字号 订阅这学期算法课的一个作业,逻辑代码都是对着伪码敲出来的,时间仓促,界面和表现效果都写得比较简陋。学习红黑树之前最好先学习下AVL树,了解AVL的性质以及旋转(左单旋、右单旋、左右双旋、右左双旋)等操作。
什么是红黑树
红黑树是一种自平衡二叉查找树,典型的用途是实现关联数组。红黑树的实现是复杂的,但是它有着良好的时间运行效率,在实际应用中是很高效的,可以在O(logn)时间内做查找、插入和删除操作,在这里n是指树的节点数目。红黑树是AVL树的变种, 红黑树通过一些着色法则确保没有一条路径会比其它路径长出两倍,因而达到接近平衡目的。
用途
红黑树和AVL树一样都对插入时间、删除时间和查找时间提供了良好的时间效率担保。这不只是使它们在时间敏感的应用如实时应用(realtime application)中有价值,而且使它们有在提供最坏情况担保的其他数据结构中作为建造板块的价值;例如,在计算几何中使用的很多数据结构都可以基于红黑树。
红黑树在函数式编程中也特别有用,在这里它们是最常用的持久数据结构之一,它们用来构造关联数组和集合,在突变之后它们能保持为以前的版本。除了O(logn)的时间之外,红黑树的持久版本对每次插入或删除需要O(log
n)的空间。
红黑树是 2-3-4树的一种等同。换句话说,对于每个 2-3-4 树,都存在至少一个数据元素是同样次序的红黑树。在 2-3-4 树上的插入和删除操作也等同于在红黑树中颜色翻转和旋转。2-3-4 树在实践中不经常使用。
性质
红黑树是每个节点都带有颜色属性的二叉查找树,颜色为红色或黑色。在二叉查找树强制一般要求以外,对于任何有效的红黑树还有如下的额外要求:性质1. 节点是红色或黑色。
性质2. 根是黑色。
性质3. 所有叶子都是黑色(叶子是NIL节点)。
性质4. 每个红色节点的两个子节点都是黑色。(从每个叶子到根的所有路径上不能有两个连续的红色节点)
性质5. 从任一节点到其每个叶子的所有简单路径都包含相同数目的黑色节点。
操作
红黑树最复杂的操作是插入和删除,其中删除操作是最复杂的。插入操作需要考虑六种情况,其中三种情况和另外三种情况是对称的,只是插入的新节点z的父节点是在其祖父节点的左子树还是在右子树的区别。而当删除操作删除的节点的子节点x是黑色的时候,则需要考虑八种情况,其中四种情况是和另外四种是对称的,只是x是其父节点的右孩子还是左孩子的区别。具体描述和操作可以参考以下链接:维基百科:http://zh.wikipedia.org/wiki/红黑树
或者这里,或者这里。
Flex实现的程序
源码:http://jasonstudio.googlecode.com/svn/trunk/RedBlackTreeApp/演示程序:http://jasonstudio.googlecode.com/svn/trunk/RedBlackTreeApp/bin-release/RedBlackTreeApp2.html
程序主要用于演示红黑树的原理,写得很简陋,使用的时候需要注意几点:
只支持正整型数据
不支持重复值
程序截图:
参考
本文章参考了http://zh.wikipedia.org/wiki/红黑树 。推荐
红黑树可视化演示的一个非常好的程序,见这里:http://www.cs.usfca.edu/~galles/visualization/flash.html 。评论这张
转发至微博
相关文章推荐
- [转载] 红黑树(Red Black Tree)- 对于 JDK TreeMap的实现
- 红黑树(RedBlackTree),平衡树(BalancedTree),SkipList 的实现
- 红黑树(Red BlackTree)的实现
- 红黑树(RedBlackTree)实现
- 红黑树(red black tree) Common Lisp 实现
- 数据结构 - 红黑树(Red Black Tree)删除详解与实现(Java)
- 红黑树与C实现算法 - RedBlackTree.c
- 红黑树(red black tree)的实现
- 红黑树与C实现算法 - RedBlackTree.c
- 自平衡二叉查找树(二)-----------红黑树(redblack tree)分析和代码实现
- 《算法导论》读书笔记——红黑树(Red Black Tree)【for_wind】
- 红黑树(Red Black Tree)
- RB-Tree(红黑树,Red-Back Tree)的C语言算法实现
- red_black_tree的一个实现(c/c++)
- 红黑树(Red Black Tree)
- C#与数据结构--树论--红黑树(RED BLACK TREE)
- HashMap的原理与实 无锁队列的实现Java HashMap的死循环 red black tree
- 红黑树(Red Black Tree)
- 红黑树(Red Black Tree)
- 红黑树(Red Black Tree)