C++进阶二叉搜索树

Posted Huang_ZhenSheng

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了C++进阶二叉搜索树相关的知识,希望对你有一定的参考价值。

目录

 二叉搜索树的删除(较复杂)

Gitee代码:二叉搜索树


 二叉搜索树的删除(较复杂)

bool Erase(const K& key)
	
		Node* parent = nullptr;
		Node* cur = _root;

		while (cur)
		
			if (cur->_key < key)
			
				parent = cur;
				cur = cur->_right;
			
			else if (cur->_key > key)
			
				parent = cur;
				cur = cur->_left;
			
			else
			
				// 删除
				if (cur->_left == nullptr)
				
					if (cur == parent->_left)
					
						parent->_left = cur->_right;
					
					else
					
						parent->_right = cur->_right;
					

					delete cur;
				
				else if (cur->_right == nullptr)
				
					if (cur == parent->_left)
					
						parent->_left = cur->_left;
					
					else
					
						parent->_right = cur->_left;
					

					delete cur;
				
				else
				
					// 找到右树最小节点去替代删除
					Node* minRightParent = cur;
					Node* minRight = cur->_right;
					while (minRight->_left)
					
						minRightParent = minRight;
						minRight = minRight->_left;
					
					cur->_key = minRight->_key;

					if (minRight == minRightParent->_left)
						minRightParent->_left = minRight->_right;
					else
						minRightParent->_right = minRight->_right;

					delete minRight;
				
				return true;
			
		
		return false;
	

(较难)对于2个孩子的节点删除,用替代法删除法

上面代码的删除,如果全删除的话,会发现程序崩溃了——出现空指针

改进===> 

 ===>>>会发现不会崩溃

Gitee代码:二叉搜索树

以上是关于C++进阶二叉搜索树的主要内容,如果未能解决你的问题,请参考以下文章

[ 数据结构进阶 - C++ ] 二叉搜索树 BSTree

C++二叉树进阶

C++进阶:二叉树进阶二叉搜索树的操作和key模型key/value模型的实现 | 二叉搜索树的应用 | 二叉搜索树的性能分析

C++进阶:二叉树进阶二叉搜索树的操作和key模型key/value模型的实现 | 二叉搜索树的应用 | 二叉搜索树的性能分析

C++进阶:二叉树进阶二叉搜索树的操作和key模型key/value模型的实现 | 二叉搜索树的应用 | 二叉搜索树的性能分析

C++进阶:二叉树进阶二叉搜索树的操作和key模型key/value模型的实现 | 二叉搜索树的应用 | 二叉搜索树的性能分析