Реферат: Двоичные деревья поиска
nodeParent = TreeNext(node);
If (nodeParent.left != NIL) Then
nodeTemp = nodeParent.left;
Else
nodeTemp = nodeParent.right;
nodeTemp.nodeParent = nodeParent.nodeParent;
If (nodeTemp.nodeParent == NIL) Then
Tree.root = nodeTemp;
Else
Begin
If (nodeParent.nodeParent.left == nodeParent) Then
nodeParent.nodeParent.left = nodeTemp;
Else
nodeParent.nodeParent.right = nodeTemp;
End
If (nodeParent != node) Then
Begin
node.key = nodeParent.key;
node.color = nodeParent.color;
{ копирование дополнительных данных }
End
If (nodeParent.color == BLACK) Then
RBTDeleteFixUp(Tree,nodeTemp);
Return nodeParent;
End
Рассмотрим, как процедура RBTDeleteFixUp восстанавливает свойства КЧД. Очевидно, что если удалили красную вершину, то, поскольку оба ее потомка чёрные, красная вершина не станет родителем красного потомка. Если же удалили чёрную вершину, то как минимум на одном из путей от корня к листьям количество чёрных вершин уменьшилось. К тому же красная вершина могла стать потомком красного родителя.
1 RTBDeleteFixUp(Tree,node) 2 Begin 3 While (node != Tree.root) and (node.color == BLACK) Do К-во Просмотров: 890
Бесплатно скачать Реферат: Двоичные деревья поиска
|