C++ 二叉搜索树的 删除算法
Posted Roam-G
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了C++ 二叉搜索树的 删除算法相关的知识,希望对你有一定的参考价值。
//二叉搜索树的 删除算法
//在以ptr为根结点的 二叉搜索树中删除x结点。若成功 则新根通过ptr返回。
template<class E, class K>
bool BST<E, K>::Remove(const K x, BSTNode<E, K>*& ptr) {
BSTNode<E, K>* temp;
if (prt != nullptrptr) {
if (x < ptr->data)
Remove(x, ptr->left);//在左子树 中执行删除
else if (x > ptr->data)
Remove(x, ptr->right);//在右子树 中执行删除
//经过 以上的循环,此时的ptr就是将要删除 的x.
else if (ptr->left != nullptr && ptr->right != nullptr) {//若有 左右子女
//若有 左右子女。 则 用 右子树的中序遍历第一结点 填补。
temp = ptr->right;//进入 右子树。
while (temp->left != nullptr)
temp = temp->left;//只要 有左孩子,就一直寻找。
ptr->data = temp->data;//填补。
Remove(ptr->data, ptr->right);//再删除这个 左孩子
}
else {//若 并不是两个子女都存在! (有一个,或者一个也没有)
temp = ptr;
if (ptr->left == nullptr)//若 没有左 孩子。
ptr = ptr->right;//用 右孩子填补
else
ptr = ptr->left;
delete temp;
return true;
}
}
return false;
};
以上是关于C++ 二叉搜索树的 删除算法的主要内容,如果未能解决你的问题,请参考以下文章