`
xuweiqing
  • 浏览: 897 次
  • 性别: Icon_minigender_1
  • 来自: 苏州
最近访客 更多访客>>
社区版块
存档分类
最新评论

二叉查找树及其实现(1)

阅读更多
     最近开始读算法导论,写的过程中把一些想法和代码写来下来,希望各种多多指点,提供建议,抑或指出我理解的不对的地方。
      二叉查找树比二叉树多了一个指向父节点的指针,在查询二叉树中根节点是唯一父节点域是NULL的节点。二叉查找树的性质:

       设x是一个二叉查找树的节点。如果y是x的左子树中的一个节点则key[y]<key[x],反之,若y是x的右子树中的一个节点则key[x]<key[y].

       二叉树的结构定义:

typedef int Item;
typedef struct node{
	Item item;
	struct node* left;
	struct node* right;
	struct node* parent;
}node;
typedef struct node* tree;

        二叉树寻找后继的函数

node* successor(node *x)
{
	if( x->right != NULL)
	{
		return successor(x->right);
	}
	node* y = x->parent;
	while( y != NULL && x == y->right)
	{
		x = y;
		y = y->parent;
	}
	return y;
}

      二叉树搜索函数,从根节点开始,如果要找的值小于当前节点的数据域的值,则左移指针,否则向右子树移动。直到相等的时候,返回指针所指的节点。

node* search(node *x, Item k)
{
	if( x == NULL || k == x->item)
		return x;
	if( k < x->item)
		search(x->left, k);
	else
		search(x->right, k);
}

    插入函数的实现。首先生成一个节点,指针域置空,数据域是要插入的值,然后使用x指针search整个树,找到要插入的位置,y指针始终指向x的父节点。

tree insert(tree t, const Item item)
{
	node *p = (node*)malloc(sizeof(node));
	p->left = p->right = p->parent = NULL;
	p->item = item;
	node *x = t, *y = NULL;
	// x用来遍历tree
	// y用来记录x的 parent
	while( x != NULL)
	{
		y = x;
		if( item < x->item)
			x = x->left;
		else
			x = x->right;
	}
	p->parent = y;

	//如果t是空树 
	if( y == NULL)
	{
		t = p;
	}
	else
	{
		if( item < y->item)
			y->left = p;
		else
			y->right = p;
	}
	return t;
}
 

 

0
1
分享到:
评论

相关推荐

    最优二叉查找树

    这些概率表示了各个键值及其空隙被访问的频率,是构建最优二叉查找树的重要依据。 #### 2.2 动态规划算法 为了找到最优二叉查找树的结构,代码采用了动态规划的方法。它首先初始化了一个二维数组`e`用于存储从`i`...

    最优二叉查找树 动态规划法.cpp.rar

    1. **数据结构定义**:定义二叉查找树节点的数据结构,包括键值、左子节点和右子节点的引用。 2. **概率分布输入**:程序需要接收输入的键值及其对应出现的概率,这可以通过数组或链表来实现。 3. **状态转移方程**...

    二叉排序树及其应用

    二叉排序树(Binary Search Tree),又称二叉查找树,是一种特殊的二叉树,其中每个节点的值大于或等于其左子树中所有节点的值,并且小于或等于其右子树中所有节点的值。这一特性使得二叉排序树能够快速定位节点,...

    数据结构二叉排序树及其操作实验报告

    二叉排序树(Binary Sort Tree,BST),也称为二叉查找树或有序二叉树,是一种特殊类型的二叉树,其每个节点的左子树只包含比其小的元素,右子树包含比其大的元素,且整个树保持自平衡。在本实验报告中,我们将深入...

    二叉查找树1

    二叉查找树(Binary Search Tree,BST)是一种特殊的二叉树数据结构,它具有以下特性:对于树中的每个节点,其左子树中的所有节点的...了解并熟练掌握二叉查找树及其操作,对于理解和实现高效的数据处理算法至关重要。

    《数据结构与算法》-李春葆 实验报告-典型查找算法实践-二叉查找树实现查找

    这篇实验报告是关于《数据结构与算法》课程中的一次实验,主要关注的是二叉查找树(Binary Search Tree,简称BST)的实现及其在查找操作中的应用。二叉查找树是一种特殊的二叉树,它的每个节点都包含一个键值,且...

    二叉排序树插入

    二叉排序树又称二叉查找树,是一种特殊的二叉树,它的每个节点都满足左子树上所有节点的关键字均小于该节点的关键字,而右子树上所有节点的关键字均大于该节点的关键字。这样的性质不仅使得二叉排序树能够快速地对...

    霍夫曼树和二叉搜索树代码实现

    1. 将所有字符及其出现频率视为独立的单节点树。 2. 在这些树中选择两个具有最小频率的树,并将它们合并成一个新的二叉树,新树的根节点的权值为其两子树权值之和。 3. 重复步骤2,直到所有节点合并成一棵树为止,这...

    cpp-二叉树以及二叉排序树的实现

    在IT领域,二叉树和二叉排序树是数据结构中的重要组成部分,它们在算法设计和程序实现中扮演着至关重要的角色。本文将深入探讨这两种数据结构的理论基础、实现方式以及它们在C/C++编程中的应用。 首先,我们要了解...

    二叉排序树的实现

    ### 二叉排序树的实现 #### 一、概述 二叉排序树(Binary Search Tree,简称BST)是一种特殊的二叉树数据结构,其每个节点包含一个键值和两个指向其左右子树的指针。对于任何节点而言,其左子树中的所有节点的键值...

    数据结构——二叉查找树(BST)静态查找表.zip

    总结,"数据结构——二叉查找树(BST)静态查找表"的主题涵盖了如何使用数据结构实现BST,以及在静态查找表环境下BST的插入、删除、查找、遍历等操作及其效率。通过学习这部分内容,我们可以深入理解BST的原理,并能...

    二叉排序树C++

    在实际编程中,这些概念和方法可以结合C++的面向对象特性进行封装,创建一个二叉排序树类,提供插入、查找、删除等方法,并实现相应的逻辑。通过练习和实践,可以深入理解二叉排序树的工作原理及其在数据结构和算法...

    c++ 二叉查找树模板示例.pdf

    这个类的实现覆盖了二叉查找树的基本操作,包括插入、查找、删除以及维护树的平衡。然而,它并没有实现自动平衡机制,这意味着在最坏情况下(如元素已排序),插入和删除操作可能会退化为线性时间复杂度。在实际应用...

    基于二叉排序树的排序查找应用C源码

    通过阅读和理解这些代码,可以加深对二叉排序树及其操作的理解,并能够动手实践,这对于学习数据结构和算法的初学者来说是非常宝贵的资源。 总之,理解和掌握二叉排序树、冒泡排序和快速排序等基础概念,对于提升...

    二叉树实现前序遍历,中序遍历和后序遍历,检查是否为二叉查找树

    在本题中,我们关注的是二叉树的遍历方法和二叉查找树的验证。下面将详细解释这些概念及其在C++中的实现。 首先,二叉树的遍历有三种主要方式:前序遍历、中序遍历和后序遍历。 1. **前序遍历**:首先访问根节点,...

    二叉查找树代码(avl,bst,rbt,sbt,splay,treap树)

    2.主要构成是基于C++的模板技术的二叉查找树代码,其中包含 avl树,bst树(二叉查找树),rbt(红黑树),sbt(size平衡树),splay(伸展树),treap树。 3.代码以一个bst_base为基础,实现通用算法。将对象特征和...

    二叉排序树

    二叉排序树,又称二叉查找树或二分搜索树,是一种特殊的二叉树数据结构,它具有以下特性:每个节点的左子树只包含比该节点小的元素,而右子树则只包含比该节点大的元素。这种结构使得在二叉排序树中进行查找、插入和...

    操作二叉搜索树(插入节点、遍历)

    这种特性使得二叉搜索树在查找、插入和删除操作中具有较高的效率。 **插入节点** 在二叉搜索树中插入节点非常直观。首先,将新节点的值与根节点比较。如果新节点的值小于根节点,那么将其插入到左子树;如果新节点...

    二叉排序树(数据结构实验 C语言实现 含报告文档)

    二叉排序树,又称二叉查找树或二叉有序树,是计算机科学中一种重要的数据结构,主要用于数据的存储和检索。它具有以下特性:对于任意一个节点,其左子树中的所有节点的值都小于该节点的值,而右子树中的所有节点的值...

Global site tag (gtag.js) - Google Analytics