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

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

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


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


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

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

STL源码剖析之树 tree 二叉搜索树 红黑树【2013.12.04】_第1张图片

STL源码剖析之树 tree 二叉搜索树 红黑树【2013.12.04】_第2张图片

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

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

STL源码剖析之树 tree 二叉搜索树 红黑树【2013.12.04】_第3张图片

这里插入没有旋转

【删除】

STL源码剖析之树 tree 二叉搜索树 红黑树【2013.12.04】_第4张图片

STL源码剖析之树 tree 二叉搜索树 红黑树【2013.12.04】_第5张图片

【旋转】

STL源码剖析之树 tree 二叉搜索树 红黑树【2013.12.04】_第6张图片

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

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

其他不变。

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

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

STL源码剖析之树 tree 二叉搜索树 红黑树【2013.12.04】_第7张图片

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

此处旋转过程为:

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

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



【红黑树】

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

STL源码剖析之树 tree 二叉搜索树 红黑树【2013.12.04】_第8张图片


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

你可能感兴趣的:(数据结构,C++,二叉树,搜索,STL)