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

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

二分查找树的C++实现 Binary Search Tree(BST)

用C++实现了二叉查找树的 创建 插入 删除 遍历(宽度优先和三种深度优先[前序,中序,后序]) 查找某值 查找最大值和最小值 清空 复制二叉树(深复制) #include #include u...
  • showonstage1
  • showonstage1
  • 2014年03月13日 19:14
  • 1606

Java实现树结构数据的递归与非递归遍历

递归与非递归的遍历 递归在很多情况下我们都会使用,比如著名的汉诺塔问题,有时候我们遍历一棵树形数据结构的数据也会需要用到递归,但是并不是绝对。原因是:以递归遍历一棵树型结构的数据为例,当这个树足够深的...
  • gemuandyou
  • gemuandyou
  • 2015年03月05日 14:16
  • 3458

折半查找的递归算法和非递归

设计一个算法,实现折半查找,很简单的问题。在这里列举下递归和非递归 递归实现 #include #include #include #include #include #include ...
  • LZK1997
  • LZK1997
  • 2016年11月24日 19:19
  • 1291

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

二叉搜索树(Binary Search Tree)的递归和非递归代码实现(C++) 二叉搜索树简单介绍 二叉搜索树(Binary Search Tree)是满足: 左子树的根节点...
  • bestlove12345
  • bestlove12345
  • 2016年06月28日 13:36
  • 426

二叉查找树的个数,BT search 1, 二叉树遍历的非递归形式,Flatten Binary Tree to Linked List

主要是卡特兰特s class Solution { public: int numTrees(int n) { if(n == 0) retu...
  • xjwowangran
  • xjwowangran
  • 2014年07月06日 14:32
  • 267

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

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

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

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

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

题目: Implement an iterator over a binary search tree (BST). Your iterator will be initialized with...
  • cinderella_niu
  • cinderella_niu
  • 2015年01月14日 16:32
  • 1307

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

树, 二叉树, 二叉查找树, 递归, Tree, Binary Tree, Binary Search Tree, Recursion
  • blackboyofsnp
  • blackboyofsnp
  • 2011年04月14日 21:04
  • 661

c语言实现二叉树的前中后序遍历 递归和非递归 数据结构

  • 2014年03月23日 20:51
  • 7KB
  • 下载
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:[数据结构]10.2实现binary search tree的查找和插入操作,用非递归的方法实现
举报原因:
原因补充:

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