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

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

相关文章推荐

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

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

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

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

我是如何成为一名python大咖的?

人生苦短,都说必须python,那么我分享下我是如何从小白成为Python资深开发者的吧。2014年我大学刚毕业..

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

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

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

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

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

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

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

以二叉排序树来建立的一棵二叉树,然后用先序,中序,后序非递归遍历package DataStructure;import java.util.Stack; public class BinaryTr...

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

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

C++数据结构之二叉树非递归操作

#include using namespace std; const int MaxSize = 100; template           //二叉树的结点结构 struct BiN...
返回顶部
收藏助手
不良信息举报
您举报文章:深度学习:神经网络中的前向传播和反向传播算法推导
举报原因:
原因补充:

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