红黑树的插入删除算法的实现(java描述)
2008-01-26 11:15
711 查看
实验目的:
熟悉红黑树的性质,使用java语言实现红黑树的插入删除算法,并测试实现的算法。问题定义
尝试构造一个红黑树。实现红黑树的定义,并且实现其插入删除的算法。插入或者删除某个元素之后扔保持红黑树的性质。可依次插入下列数组中的元素:{41,12,8,7,3,9,10,11,56,29,33,43}
打印该红黑树。
删除元素10,9,再次打印该红黑树。
实验思想
红黑树:1) 每个结点或是红的,或是黑的
2) 根结点是黑的
3) 每个叶结点(NIL)是黑的
4) 如果一个结点是红的,那么它的2个儿子是黑的。
5) 对每个结点,从该结点到其子孙结点的所有路径上包含相同数目的黑结点。
结点插入部分:
思想:与平衡二叉树相同
伪码:
RBInsert(T, z)
{ y ← nil[T]; //y用于记录:当前扫描节点的双亲节点
x ← root[T]; //从根开始扫描
while x ≠ nil[T] do //查找插入位置
{ y ← x;
if key[z] < key[x] then //z插入x的左边
x ← left[x];
else
x ← right[x]; //z插入x的右边
}
p[z] ←y; //y是z的双亲
if y = nil[T] then //z插入空树
root[T] ←z; //z是根
else
if key[z] < key[y] then
left[y] ← z; //z是y的左子插入
else
right[y] ←z; //z是y的右子插入
left[z] ← right[z] ← nil[T];
color[z] ← red;
RBInsertFixup(T, z);// 调整(z上溯),使树T满足红黑树
}
调整部分:
思路:
以2叉搜索树的方式查找可以插入该结点的位置,插入该结点。然后通过旋转和改变颜色,自下而上调整(该结点z进行上溯),使树满足红黑树;
框架:
可能违反性质2:z是根
可能违反性质4:p[z]是红
相关文章推荐
- 红黑树插入与删除 算法实现+代码(一)
- [算法导论]红黑树实现(插入和删除) @ Python
- 经典算法:红黑树的C语言实现 ( 插入 、删除 )
- 【算法】红黑树的讲解及插入删除算法实现原理
- 红黑树插入与删除 算法实现+代码(二)
- 红黑树-JAVA实现(红黑树插入和删除)
- 数据结构Java实现03----单向链表的插入和删除
- 【算法导论-34】红黑树、顺序统计树的Java实现
- 【算法拾遗(java描述)】--- 插入排序(直接插入排序、希尔排序)
- 数据库的插入、修改、删除操作(java实现)
- Java实现堆的封装,进行插入,调整,删除堆顶以完成堆排序实例
- 面试之路(10)-BAT面试之java实现单链表的插入和删除
- java实现堆的操作(建堆,插入,删除)
- 二叉搜索树Java实现(查找、插入、删除、遍历)
- java代码实现贪心算法删除数字问题
- 【LeetCode-面试算法经典-Java实现】【057-Insert Interval(插入区间)】
- Java 实现往红黑树插入结点
- java实现堆的操作方法(建堆,插入,删除)
- ibatis 批量插入,批量更新,批量删除,xml与Java代码实现方式
- 【LeetCode-面试算法经典-Java实现】【026-Remove Duplicates from Sorted Array(删除排序数组中的重复元素)】