您的位置:首页 > 理论基础 > 数据结构算法

STL源码剖析之树 tree 二叉搜索树 红黑树【2013.12.04】

2013-12-04 10:33 246 查看
STL源码剖析之树 tree 二叉搜索树 红黑树【2013.12.04】

欢迎加入我们的QQ群,无论你是否工作,学生,只要有c / vc / c++ 编程经验,就来吧!158427611 

树 在数据结构中是一个很重要的成员。详细无论哪本数据结构的书都有介绍!如果没有的话,你确定你买的是对的书么?

STL中,树相关的就是 平衡二叉树,二叉搜索树就是一种平衡二叉树,红黑树则又是一种二叉搜索树。

书中对二叉搜索树这样定义:





在对树操作的过程中,为了保持树的平衡性,就需要对树进行旋转

搜索树的插入节点,每次都是在叶子结点插入,再进行旋转。



这里插入没有旋转
【删除】





【旋转】



此处 【11】为插入节点,当找到插入点 插入之后,发现破坏了平衡性,因而旋转操作

此处旋转过程为,插入点父节点的父节点(PP,即【14】)向上一级,PP的父节(PPP,即【18】)点向下,变成PP的右子节点,员PP的右子节点变成PPP的左子节点。

其他不变。

这种旋转,STL源码剖析 称为 【单旋转】因为一次旋转就能恢复平衡。

主要使用情况:插入点的父节点是左子节点的时候。



此处是双旋转,进行两个单旋转。才能恢复平衡。

此处旋转过程为:

(一)插入点的父节点(P,即【16】)向上,P的父节点(PP,即【14】)向下,PP变成P的左子节点,插入点变成PP的右子节点,P接管PP原来的父节点关系。

(二)做单旋转过程,返回去看吧,呵呵

【红黑树】

红黑树是一种受限制的搜索树,其限制如下:



欢迎加入我们的QQ群,无论你是否工作,学生,只要有c / vc / c++ 编程经验,就来吧!158427611 
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息