二叉排序树的删除
代码
template <class ElemType>
void BinarySortTree<ElemType>::Delete(BinTreeNode<ElemType> *&p)
{
BinTreeNode<ElemType> *tmpPtr, *tmpF;
if (p->leftChild == NULL && p->rightChild == NULL) {
delete p;
p = NULL;
}
else if (p->leftChild == NULL) {
tmpPtr = p;
p = p->rightChild;
delete tmpPtr;
}
else if (p->rightChild == NULL) {
tmpPtr = p;
p = p->leftChild;
delete tmpPtr;
}
else {
tmpF = p;
tmpPtr = p->leftChild;
while (tmpPtr->rightChild != NULL) {
tmpF = tmpPtr;
tmpPtr = tmpPtr->rightChild;
}
p->data = tmpPtr->data;
if (tmpF->rightChild == tmpPtr)
Delete(tmpF->rightChild);
else
Delete(tmpF->leftChild);
}
}