精华内容
下载资源
问答
  • 或者是具有下列性质二叉树:  (1)若左子树空,则左子树上所有结点值均小于它根结点值; (2)若右子树空,则右子树上所有结点值均大于它根结点值; (3)左、右子树也分别为二叉排序树; ...
    定义:
    二叉排序树(Binary Sort Tree)又称二叉查找树。 它或者是一棵空树;或者是具有下列性质的二叉树: 
    (1)若左子树不空,则左子树上所有结点的值均小于它的根结点的值;
    (2)若右子树不空,则右子树上所有结点的值均大于它的根结点的值;
    (3)左、右子树也分别为二叉排序树;
    下面代码中主要实现了二叉树的插入,删除,查找三个功能;具体的实现有注释,如果有错误或者您不理解的地方,欢迎提出来,大家共同讨论。
    #include<stdio.h>
    #include<malloc.h>
    #define EQ(a,b) ((a)==(b))
    #define LT(a,b) ((a)<(b))
    #define LQ(a,b) ((a)<=(b))
    typedef int KeyType ;
    typedef struct ElemType			//树的存储内容,为了简便,只存储了关键值
    {
    	KeyType key;//关键字
    }ElemType;
    typedef struct BSTNode			//二叉排序树的结构
    {
    	ElemType data;
    	BSTNode *lchild,*rchild;
    }*BSTree;
    void InitBSTree(BSTree &T)	//树的初始化
    {
    	T=NULL;
    }
    int SearchBST(BSTree T,KeyType key,BSTree f,BSTree &p)
    //查找关键值为key的函数,若存在这个结点,则在p中保存该结点的地址,
    //若不存在这个值,则p中保存查找路径上的最后一个结点的位置,并返回0
    {
    	if(!T)
    	{
    		p=f;
    		return 0;
    	}
    	else if(EQ(T->data.key,key))
    	{
    		p=T;
    		return 1;
    	}
    	else if(LT(T->data.key,key))
    		SearchBST(T->rchild,key,T,p);
    	else
    		SearchBST(T->lchild,key,T,p);
    }
    int InsertBST(BSTree &T,ElemType e)
    {
    	BSTree p;
    	if(!SearchBST(T,e.key,NULL,p))	//首先在树中查找是存在与待插关键字相等的元素,如果存在,返回0,不存在,p中已经保存待插位置的地址
    	{
    		BSTree s=(BSTree)malloc(sizeof(BSTNode));
    		s->data=e;
    		s->lchild=s->rchild=NULL;
    		if(!p)								//如果p是空树的话
    			T=s;
    		else if(LT(e.key,p->data.key))		//如果待插结点的值小于双亲结点的值,则插在左孩子中
    			p->lchild=s;
    		else								//否则插入右孩子中
    			p->rchild=s;
    		return 1;
    	}
    	else
    		return 0;
    }
    void Delete1(BSTree & p)
    //删除p这个结点,由于整个二叉排序树中序遍历是有序的,
    //所以当p点结点的值删除后,p点若从子树中的结点中选取一个替换p结点,
    //则这个结点要保证比不小于左子树所有结点,不大于右子树中所有结点
    //因此可以选取p结点的前驱结点,就是左子树的第一个结点的,一直向右走的最后一个结点即可
    {
    	BSTree q;
    	if(p->lchild==NULL)//如果左子树为空,只需要讲右子树的第一个结点往前提一个即可
    	{
    		q=p;
    		p=p->rchild;
    		free(q);
    	}
    	else if(p->rchild==NULL)
    	{
    		q=p;
    		p=p->lchild;
    		free(q);
    	}
    	else
    	{
    		BSTree s=p->lchild;
    		q=p;
    		while(s->rchild!=NULL)
    		{
    			q=s;
    			s=s->rchild;
    		}
    		p->data=s->data;
    		if(q!=p)
    			q->rchild=s->rchild;
    		else
    			q->lchild=s->lchild;
    	}
    
    }
    int DeleteBST(BSTree &T,KeyType key)
    {
    	if(!T)
    		return 0;
    	else
    	{
    		if(EQ(key,T->data.key))
    			Delete1(T);
    		else if(LT(key,T->data.key))
    			DeleteBST(T->lchild,key);
    		else
    			DeleteBST(T->rchild,key);
    		return 1;
    	}
    }
    void InOrderTraverse(BSTree T)
    {
    	if(T)
    	{
    		InOrderTraverse(T->lchild);
    		printf("%d ",T->data.key);
    		InOrderTraverse(T->rchild);
    	}
    }
    int main()
    {
    	BSTree T,p;
    	InitBSTree(T);
    	int i;
    	ElemType e[6];
    	e[0].key=45;
    	e[1].key=24 ;
    	e[2].key=53;
    	e[3].key=12 ;
    	e[4].key=37 ;
    	e[5].key=93 ;
    	for(i=0;i<6;i++)
    		InsertBST(T,e[i]);
    	InOrderTraverse(T);
    	printf("\n");
    	SearchBST(T,54,NULL,p);
    	printf("%d\n",p->data.key);
    	DeleteBST(T,24);
    	InOrderTraverse(T);
    }

    展开全文
  • 数据结构课设

    2013-01-03 02:51:25
    1) 设每个记录有下列数据项:电话号码、用户名、地址; 2) 从键盘或文件输入各记录,少于30个,以电话号码为关键字建立散列表; 3) 采用链地址方法解决冲突; 4) 查找并显示给定电话号码记录; 5、排序...
  • 数据结构 1800题》

    热门讨论 2012-12-27 16:52:03
    15. 下列数据中,(C )是非线性数据结构。【北京理工大学 2001 六、1(2分)】 A.栈 B. 队列 C. 完全二叉树 D. 堆 16.连续存储设计时,存储单元地址(A )。【中山大学 1999 一、1(1分)】 A.一定连续 B....
  • 数据结构(C++)有关练习题

    热门讨论 2008-01-02 11:27:18
    9、 已知f为单链表表头指针,链表中存储都是整型数据,试写出实现下列运算递归算法: a. 求链表中最大整数; b. 求链表结点个数; c. 求所有整数平均数; 告要求: 写出能运行完整...
  • 下列图符名标识图符属于数据流图合法图符是(A) 注:P67 A. 控制流 B. 加工 C. 数据存储 D. 源和潭 (17) 软件需求分析阶段工作,可以分为四个方面:需求获取、需求分析、编写需求规格说明书以及(B) 注:P66 A...
  • (24) 数据库系统中实现各种数据管理功能的核心软件称为______。 答:数据库管理系统#DBMS (25) 关系模型的数据*纵即是建立在关系上的数据*纵,一般______、增加、删除和修改四种*作。 答:查询 (26) 实现算法所...
  • 例如,在一维数组[21,46,24,99,57,77,86]中,查找数据元素99,首先从第1个元素21开始进行比较,比较结果与要查找的数据不相等,接着与第2个元素46进行比较,以此类推,当进行到与第4个元素比较时,它们相等,...
  • 根据《阿里巴巴Java开发手册》,以下功能必须进行水平权限控制校验的有:ABCD A .订单详情页面。 B .类目管理后台。 C .店铺装修后台。 D .订单付款页面。 多选 6.关于数据库中NULL的描述,下列哪些说法...
  • 则需要进行全表扫描, 以便将数据按照所定义语言排序进行整理。 值范围: BINARY 或有效语言定义名。 默认值: 从 NLS_LANGUAGE 中获得 nls_territory: 说明: 为以下各项指定命名约定, 包括日期和星期编号, ...
  • gawk官方手册

    2015-02-04 14:13:54
    它允许您创建简短程序,这些程序读取输入文件、为数据排序、处理数据、对输入执行计算以及生成报表,还有无数其他的功能。 最简单地说, AWK 是一种用于处理文本编程语言工具。AWK 在很多方面类似于 shell 编程...
  • oracle数据库经典题目

    2011-02-17 15:05:20
    该部分通过变量赋值、流程控制、数据查询、数据操纵、数据定义、事务控制、游标处理等实现块的功能。 异常处理部分:以关键字EXCEPTION开始,END结束。该部分用于处理该块执行过程中产生异常。 8. 说明触发器...
  • SQL语法大全

    2014-03-30 11:00:11
    COUNT(*|字段名) 对数据行数统计或对某一栏的数据行数统计 MAX(字段名) 取得一个表格栏最大值 MIN(字段名) 取得一个表格栏最小值 SUM(字段名) 把数据值相加 引用以上函数方法: sql="select sum...
  • Visual C++ 2008入门经典--详细书签版

    热门讨论 2013-02-02 16:07:15
    CruiseYoung提供详细书签电子书籍目录 http://blog.csdn.net/fksec/article/details/7888251 特别说明:该版本是目前网络上最全版本:修正了268-367页缺页问题。 Visual C++ 2008入门经典 基本信息 ...
  • CruiseYoung提供详细书签电子书籍目录 http://blog.csdn.net/fksec/article/details/7888251 特别说明:该版本是目前网络上最全版本:修正了268-367页缺页问题。 该资料是《Visual C++ 2008入门经典》...
  • 会计理论考试题

    2012-03-07 21:04:40
    15.下列软件中属于系统软件是 ___D__ 。 A、Windows B、Visual FoxPro C、UCDOS D、WPS97 16.应用软件在计算机普及中起重要作用,下列 ___D__ 都属于应用软件。 A、WPS、DOS、Lotusl-2-3 B、WIndows95、Word、...
  • B) 在Java类中可以三类内容分别是数据的定义、基本输出语句、函数定义。 C) Java中封装就是将对象的数据和操作数据的方法相结合,通过方法将对象的数据和实现细节保护起来。 D) Java语言中多态含义可以...
  • Visual C++ 2005 入门经典 详细书签版

    热门讨论 2013-02-02 16:39:43
    CruiseYoung提供详细书签电子书籍目录 http://blog.csdn.net/fksec/article/details/7888251 Visual C++ 2005入门经典 基本信息 原书名: Ivor Horton's Beginning Visual C++ 2005 原出版社: Wiley 作者...
  • CruiseYoung提供详细书签电子书籍目录 http://blog.csdn.net/fksec/article/details/7888251 该资料是《Visual C++ 2005入门经典》源代码及课后练习答案 对应书籍资料见: Visual C++ 2005入门经典 ...
  • oracle实验报告

    2019-01-10 19:29:58
    (2)按照业务内容创建实现具有特定功能的函数。 【实验内容】 1、 写存储过程,显示所指定雇员名所在的部门名和位置。 CREATE OR REPLACE PROCEDURE DeptMesg(pename emp.ename%TYPE, pdname OUT dept.dname%TYPE,...
  • MySQL命令大全

    2018-01-15 11:19:17
    MySql用户管理是通过User表来实现,添加新用户常用方法两个,一是在User表插入相应的数据行,同时设置相应权限;二是通过GRANT命令创建具有某种权限用户。其中GRANT常用用法如下: grant all on mydb...
  • 29. 下列算法中,能用来排序的算法是( )。 A) 冒泡法 B) 插入排序 C) 选择排序 D) 对分法 30. 堆栈操作原则是( )。 A) 先进先出 B) 后进先出 C) 只能进 D) 只能出 二、填空题(每空1分,共15分) 请将正确答案...
  • 除了实现数据的增删改查,数据访问层还要提供一些与业务无关功能,例如面向对象持久化与访问机制、本地事务与分布式事务支持、多数据库支持,这些机制或功能形成相对独立逻辑领域,其主要目的: <br>1、 ...
  • (2)该字典树具有插入和查找和统计的功能 (3)用一组IP地址(期中一些IP地址以192开始)初始化该字典树 (4)在该字典树中查找以192开始IP地址个数,并打印出查找结果。 (5)查找10.10.10.10是否在该字典数据...
  • 简单 Java图片加水印,支持旋转和透明度设置 摘要:Java源码,文件操作,图片水印 util实现Java图片水印添加功能添加图片水印和文字水印,可以设置水印位置,透明度、设置对线段锯齿状边缘处理、水印图片路径,...
  • JAVA上百实例源码以及开源项目

    千次下载 热门讨论 2016-01-03 17:37:40
     Java局域网通信——飞鸽传书源代码,大家都知道VB版、VC版还有Delphi版飞鸽传书软件,但是Java版确实多,因此这个Java文件传输实例可错过,Java网络编程技能提升很帮助。 Java聊天程序,包括服务端和...
  • B:写出下列算法时间复杂度和实现排序: (1)冒泡排序; (2)选择排序; (3)插入排序; (4)快速排序; (5)堆排序; (6)归并排序; 23、编写gbk_strlen函数,计算含有汉字字符串长度,汉字作为一个字符处理;已知...
  • CruiseYoung提供详细书签电子书籍目录 http://blog.csdn.net/fksec/article/details/7888251 Visual C++ 2010入门经典(第5版) 基本信息 原书名: Ivor Horton's Beginning Visual C++ 2010 原出版社: ...
  • CruiseYoung提供详细书签电子书籍目录 http://blog.csdn.net/fksec/article/details/7888251 该资料是《Visual C++ 2010入门经典(第5版)》源代码及课后练习答案 对应书籍资料见: Visual C++ 2010...
  • 虽然结构化程序设计方法具有很多优点,但它仍是一种面向过程程序设计方法,它把数据和处理数据的过程分离为相互独立实体。当数据结构改变时,所有相关处理过程都要进行相应修改,每一种相对于老问题新...

空空如也

空空如也

1 2 3
收藏数 47
精华内容 18
关键字:

下列数据不具有排序功能的有