让我们假设以下是红黑树的定义:
- 它是二叉搜索树。
- 每个节点都被涂成红色或黑色。根是黑色的。
- 通过边连接的两个节点不能同时为红色。
- 像Wiki一样,这应该是NIL叶的良好定义。NIL叶为黑色。
- 从根到任何NIL叶的路径都包含相同数量的黑色节点。
题
假设您已经为红黑树实现了insert
和delete
操作。现在,如果为您提供了有效的红黑树,是否总有一个构造它的insert
和序列delete
?
动机
就个人而言,我确实相信,如果您想象一个仅由黑色节点组成的有效红黑树(这意味着您正在想象一个完美平衡的树),那么将有一个由insert
和delete
构成的序列。然而,
- 我不知道如何准确证明
- 我也对更一般的情况感兴趣
您的问题听起来有点循环...任何一组插入和删除操作都将构造一棵红黑树...实际上什么都可以,因为红黑只是一个定义。您的问题仅限于纯黑树吗?
—
JOX
不,我想你误会了。当然,任何插入和删除集都会构造一些红黑树。问题是这样的:是否可以通过某些插入和删除序列来构造符合定义的任何树?如果给您一些树,是否可以重新创建一系列插入和删除操作?
—
alisianoi
@ all3fox是的,您是对的。有一种算法使用该运算
—
安东·特鲁诺夫
insert
并delete
构造仅由黑色节点组成的有效红黑树。它使用插入/删除来创建高度为的树。首先,我们可以使用插入物以广度优先的方式创建一个完美平衡的红黑树,然后使用插入物并将相同数量的缺失重新绘制为一棵全黑的树。这里的技巧是将树的最低红色层向上移动倍,直到到达根。
@AntonTrunov谢谢,我有点理解。普通的红黑树情况如何?您认为,可以使用
—
alisianoi 2015年
insert
和delete
运算构造给定的红黑树吗?
一)答案将取决于精确的实施
—
拉斐尔
insert
和delete
; 可能有几种方法可以执行这些操作。b)由于RB树本质上是4阶B树,因此可以从中寻找灵感。由于从RB到B(和/或向后)的映射不是唯一的,因此细节可能很棘手。