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