[数据结构]10.2实现binary search tree的查找和插入操作,用非递归的方法实现

Posted yccy1230

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了[数据结构]10.2实现binary search tree的查找和插入操作,用非递归的方法实现相关的知识,希望对你有一定的参考价值。

//*****************************************************insert循环版**************************************
template<class Record>
Error_code Binary_search_tree<Record>::c_insert(const Record & item)

	Binary_node<Record> *current=root, *previous=root;
	if(!current)root = new Binary_node<Record>(item);
	else 
		while (current != NULL) 
			previous = current;
			if (current->data > item)current = current->left_child;
			else if (current->data < item)current = current->right_child;
			else return duplicate_error;
		
		if (previous->data > item)
			previous->left_child = new Binary_node<Record>(item);
		else
			previous->right_child = new Binary_node<Record>(item);
		return success;
	


//******************************************************remove循环版*************************************
template<class Record>
Error_code Binary_search_tree<Record>::c_remove(const Record & item)

	if (root == NULL || root->data == item)
		return destroy(root);
	else 
		Binary_node<Record> *current = root, *previous = root;
		while (current != NULL) 
			previous = current;
			if (current->data > item)current = current->left_child;
			else if (current->data < item)current = current->right_child;
			else return destroy(current);
		
		return not_present;
	

template<class Record>
Error_code Binary_search_tree<Record>::destroy(Binary_node<Record>*& sub_root)

	if (sub_root == NULL)return not_present;
	Binary_node<Entry> *to_delete = sub_root;
	if (sub_root->left_child == NULL) sub_root = sub_root->right_child;
	else if (sub_root->right_child == NULL) sub_root = sub_root->left_child;
	else 
		to_delete = sub_root->left_child;
		Binary_node<Entry> *parent = sub_root;
		while (!to_delete->right_child) 
			parent = to_delete;
			to_delete = to_delete->right_child;
		
		sub_root->data = to_delete->data;
		if (parent == sub_root)sub_root->left_child = to_delete->left_child;		//Special condition:no right_child under to_delete
		else parent->right_child = to_delete->right_child;
	
	delete to_delete;
	return success;

以上是关于[数据结构]10.2实现binary search tree的查找和插入操作,用非递归的方法实现的主要内容,如果未能解决你的问题,请参考以下文章

java 如何实现 binary search 二分查找法?

关于二分查找binary_search的结构体struct运用

二分搜索树(Binary Search Tree)

[Math] Beating the binary search algorithm – interpolation search, galloping search

高阶数据结构 | 二叉搜索树(Binary Search Tree)

04-树6 Complete Binary Search Tree