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

原创 2016年06月01日 19:14:31
//*****************************************************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;

版权声明:本文为博主原创文章,未经博主允许不得转载。

相关文章推荐

[数据结构]贪婪算法(Dijkstra Algorithm)

下周要期末考了,好虚啊=_= 复习一波数据结构发现最后一章居然还有两个算法没看 所以顺道把贪婪和最小生成树看一下~ 这篇就只讲贪婪算法啦,一会再开一篇。 一、贪婪算法简介 贪心算法(又称贪婪算法)...

双按钮双事件监听机制的简单java GUI

写在前面: 前两篇博客我们分别介绍了简单java GUI的基本结构及事件监听机制。这一次我们将介绍双事件(多事件)监听机制,并引入内部类。1.设计任务设计一个GUI,包含基本组件:按钮(两个),标签...

二叉搜索树(Binary Search Tree)的递归和非递归代码实现(C++)

二叉搜索树(Binary Search Tree)的递归和非递归代码实现(C++) 二叉搜索树简单介绍 二叉搜索树(Binary Search Tree)是满足: 左子树的根节点...

数据结构——排序/搜索二叉树(非递归)的基本操作实现

什么是搜索二叉树:       二叉树(binary)是一种特殊的树。二叉树的每个节点最多只能有2个子节点:由于二叉树的子节点数目确定,所以可以直接采用上图方式在内存中实现。每个节点有一个左子节点(...

数据结构用递归和非递归方法实现二分查找法

二分查找法说的通俗一点就是折半查找,每查找一次,所对应的元素就会减少一半,所以这种方法的优点就是比较的次数少,查找的速度快。但其最大的缺点就是插入数据比较困难。所以在面对数据一直会发生变动的列表,就不...
  • At_code
  • At_code
  • 2017年02月10日 14:42
  • 183

[C++]LeetCode: 93 Binary Search Tree Iterator (经典题,非递归的中序遍历)

题目: Implement an iterator over a binary search tree (BST). Your iterator will be initialized with...

【数据结构与算法基础】二叉查找树 / Binary Search Tree

树, 二叉树, 二叉查找树, 递归, Tree, Binary Tree, Binary Search Tree, Recursion

数据结构与算法分析笔记与总结(java实现)--二叉树2:非递归二叉树的序列打印练习题

数据结构与算法分析笔记与总结(java实现)--二叉树2:非递归二叉树的序列打印练习题...

【数据结构】Java实现二叉树遍历(非递归)

以二叉排序树来建立的一棵二叉树,然后用先序,中序,后序非递归遍历package DataStructure;import java.util.Stack; public class BinaryTr...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:[数据结构]10.2实现binary search tree的查找和插入操作,用非递归的方法实现
举报原因:
原因补充:

(最多只允许输入30个字)