我有一个工作正常的红黑树算法。当一个节点插入到树中时,insert()方法返回给调用者一个指向已插入节点的指针。我将所有这些指针存储在STL向量中。跟踪改变指针
问题是,在RB树的操作中,有时这些指针是无效的。例如,在rotateleft/right期间调用的方法会将节点A的值复制到当前节点中,然后删除节点A.那么我在那个向量中有一个指向节点A的指针,现在这个指针是无效的。
我考虑制作的方式来更新在所述载体中的指针如下,
1)保留哪个节点指针映射到保存这些指针的矢量索引多重映射。
2)删除一个节点之前,检查此多重映射找到将受影响
3载体的所有点)遍历向量和老指针更改为新指针
4 )更新multimap中的键值以反映新指针。
问题是,出于显而易见的原因,您无法更新地图集合的键值。此外,这似乎是一个可怕的解决方案,无论是复杂性和实施的原因。关于如何完成指针动态更新的任何想法?
你可以使用指向下一个节点和前一个节点的指针吗?这样,如果更改指针,则可以按照其“prev”指针并在那里更正指针。 – schnaader 2011-04-26 23:50:21
您的场景听起来不必要的复杂。为什么你需要指向节点的向量?如果你想要所有节点的集合,你可以遍历树。 – Alan 2011-04-26 23:50:53
同意Alan。为什么首先要保持向量中的指针?通常,在不同地方保持原始指针是一个很大的麻烦。 – 2011-04-27 00:59:58