[数据结构]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;

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值