博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
平衡搜索树
阅读量:4879 次
发布时间:2019-06-11

本文共 1172 字,大约阅读时间需要 3 分钟。

   ------------------------------------------------------读《算法》后感

一直以来,对于红黑树都没有很好的理解,指导看了《算法》和上了coursera上的公开课,终于算是有了较好的理解,现写下来和大家分享

前言:2-3查找树         

      虽然二叉搜索树已经很好的解决大多数搜索问题,但是在最坏的情况下的性能还是很差 (~N),为了保证查找的树的平衡。我们引入了3-结点(相较于二叉查找树中的2-结点),并据此构造出2-3查找树。其性质如下:

Allow 1 or 2 keys per node.

      2-nodes: one key, two children.

      3-nodes: two keys, three children.

Symmetric order. Inorder traversal yields keys in ascending order.

Perfect balance. Every path from root to null link has same length.

 至于对于2-3树的查找,插入的查找都比较简单,可参考下面的图片

 

图片引用自:(以下所有图片均源于此)

红黑二叉查找树                                      

红黑二叉查找树的基本思想就是用标准的二叉查找树(完全由2-结点构成)和一些额外的信息(替换3-结点)来表示2-3树

.1 替换3-结点

红黑树的一种等价定义:

  . 红链接均为左链接

  . 没有任何一个结点同时和两条红链相连

  . 该树是完全黑色平衡的,即任意空连接到根结点的路径上的黑链接数量相同

 

.2颜色表示

.红黑树的查找与基本的二叉查找树的方法相同

.红黑树的表示

.3 旋转

    ..左旋转h的右链接(Orient a (temporarily) right-leaning red link to lean left.)

    1.将h的右子树指向x的左子树

    2.将x的左子树指向h

    3.将x的color变为h的color

    4.然后x的左子树(即为h的color)变为红色

..右旋转h的左链接

1.将h的左子树指向x的右子树

2.将x的右子树指向h

3.将x的color变为h的color

4.然后x的右子树(即为h的color)变为红色

..颜色转换:讲一个结点的两个红色子节点的颜色转换,同时将父节点的颜色由黑色转换成红色

 

.4 插入

  ..将树底部的2-结点插入新键

  

   ..向一颗双键树(即一个3-结点)中插入新键

       …新键大于原树中的两个键

       …新键小于原树中的两个键

       …新建介入原树中的两个键

..向树底部3-结点插入新结点

    …case 1:

   …case2:

…插入的代码实现

转载于:https://www.cnblogs.com/maverick-fu/p/4044656.html

你可能感兴趣的文章
COJ 2135 Day10-例1
查看>>
jdbc之分页查询
查看>>
PHP手动环境搭建之WAMP
查看>>
COJ 1003 WZJ的数据结构(三)ST表
查看>>
sbrk and coreleft
查看>>
树型DP
查看>>
怎么在ubuntu上使用pidgin登陆QQ
查看>>
思维的惰性
查看>>
2018-2019-2 网络对抗技术 20165115 Exp3 免杀原理与实践
查看>>
【Android】学习记录<1> -- 初识ffmpeg
查看>>
定位页面元素的位置
查看>>
关于IAsyncResult接口的CompletedSynchronously属性
查看>>
Python:一篇文章掌握Numpy的基本用法
查看>>
序列化与ArrayList 的elementData的修饰关键字transient
查看>>
学习进度17
查看>>
编译原理——算符优先分析文法(附源代码)
查看>>
jboss的启动过程
查看>>
渲染部分
查看>>
力扣——所有可能的路径
查看>>
关于VS项目平台的x86,x64,Any CPU以及Debug和Release的区别
查看>>