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++ 二叉搜索树的 删除算法的主要内容,如果未能解决你的问题,请参考以下文章

C++进阶二叉搜索树

C++二叉搜索树解析

C++二叉搜索树解析

c++:二叉搜索树BinarySortTree

c++:二叉搜索树BinarySortTree

数据结构与算法 通俗易懂讲解 二叉搜索树插入删除