树表的查找

news2024/11/22 22:03:32

二叉排序树

        二叉排序树(BST)又称二叉搜索树,其满足以下性质:

(1)若根节点的左子树非空,则左子树上的所有节点关键字均小于根节点的关键字。

(2)若根节点的右子树非空,则有子树上的所有节点关键字均大于根节点的关键字。

(3)根节点的左右子树本身又是一颗二叉排序树。

(4)二叉排序树的中序序列为递增有序序列。

(5)二叉有序树最左下的节点为最小的节点,最右下的节点为最大的节点。

二叉有序树的建立是采用链式存储结构。

结构体的定义:

typedef struct node
{
	int key;                         //关键字
	struct node* lchild, * rchild;   //左右孩子指针
};

二叉排序树的插入:

BSTNode* InsertBST(BSTNode* bt, int k)
{
	if (bt == NULL)
	{
		bt = (BSTNode*)malloc(sizeof(BSTNode));       //该节点为空则新建bt节点
		bt->key = k;
		bt->lchild = bt->rchild = NULL;
	}
	else if (k < bt->key)                             //插入左子树
	{
		bt->lchild = InsertBST(bt->lchild, k);
	}
	else if (k > bt->key)                             //插入右子树
	{
		bt->rchild = InsertBST(bt->rchild, k);
	}
	return bt;                                        //返回插入后二叉排序树的根节点
}

二叉排序树的创建:

BSTNode* CreateBST(int a[], int n)
{
	BSTNode* bt = NULL;
	int i = 0;
	while (i < n)
	{
		bt = InsertBST(bt, a[i]);     //将关键字a[i]逐个插入到二叉排序树中
		i++;
	}
	return bt;
}

二叉排序树的查找:

递归算法:

BSTNode* RECSearchBST(BSTNode* bt, int k)
{
	if (bt == NULL || bt->key == k)
	{
		return bt;                   //若为空则为找到,若找到则返回在bt中关键字为k的节点
	}
	if (k < bt->key)
	{
		return SearchBST(bt->lchild, k);   //在左子树中递归查找
	}
	else
	{
		return SearchBST(bt->rchild, k);   //在右子树中递归查找
	}
}

非递归算法:

BSTNode* SearchBST(BSTNode* bt, int k)
{
	BSTNode* p = bt;
	while (p != NULL)
	{
		if (p->key == k)break;
		else if (k < p->key)
		{
			p = p->lchild;
		}
		else
		{
			p = p->rchild;
		}
	}
	return p;
}

        二叉排序树上进行查找的平均查找长度与其形态有关,其形态与关键字的输入顺序有关(即与排序二叉树的构建有关):

在含有 n 个关键字的集合中(n>0,所有关键字唯一)有 n!个关键字。

可构造出不同形态的排序二叉树有:

                                                  \large \frac{1}{n+1}C_2_n^n

        最坏的情况下二叉排序树会蜕化为一颗高度为 n 的单支树,其平均查找长度与单链表上的顺序查找相同即为(n+1)/2 此时的时间复杂度为O(n)。

        最好的情况下二叉树形态比较均匀,与折半查找的判定树类似此时的时间复杂度为O(logn)。

        故一颗含有 n 个节点的二叉排序树的查找算法的时间复杂度介于 O(logn) 与O(n)之间。

查找最大节点与最小节点:

int maxnode(BSTNode* p)        //返回二叉树中最大节点的关键字
{
	while (p->rchild != NULL)
		p = p->rchild;
	return p->key;
}
int minnode(BSTNode* p)       //返回二叉树中最小节点的关键字
{
	while (p->lchild != NULL)
		p = p->lchild;
	return p->key;
}
void maxminnode(BSTNode* p)
{
	if (p != NULL)
	{
		if (p->lchild != NULL)
			printf("最大节点为:%d\n",maxnode(p->lchild));
		if (p->rchild != NULL)
			printf("最小节点为:%d\n", minnode(p->rchild));
	}
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/28603.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

补充(二)古典密码两张思维导图速通

目录 目录 古典密码思维导图 古典密码分析思维导图 唯密文分析古典密码 单表代替密码 棋盘密码 曾公密码 置换密码的代表&#xff1a;斯巴达人的密码棒 古典密码思维导图 古典密码分析思维导图 唯密文分析古典密码 最困难的分析条件通常需要用到英文字母的频率分析和反…

【微服务】SpringCloud中Ribbon集成Eureka实现负载均衡

&#x1f496; Spring家族及微服务系列文章 ✨【微服务】SpringCloud轮询拉取注册表及服务发现源码解析 ✨【微服务】SpringCloud微服务续约源码解析 ✨【微服务】SpringCloud微服务注册源码解析 ✨【微服务】Nacos2.x服务发现&#xff1f;RPC调用&#xff1f;重试机制&#xf…

Maven打Jar包,启动报NoClassDefFoundError错误

今天准备将游戏服务器的压测机器人打包分发给其他人来运行对服务器进行压力测试。打成的jar包发现运行报错了。找了半天才找到最终原因。下面是原因和一些分析的情况。 原因 java -jar .\robot.jar发现错误如下 看到这个错误就知道jvm找不到对应的类。但是为什么找不到对应的…

JVM的内存区域划分

文章目录 前言一、本地方法栈&#xff08;线程私有&#xff09;二、程序计数器&#xff08;线程私有&#xff09;三、Java虚拟机栈&#xff08;线程私有&#xff09;四、堆&#xff08;线程共享&#xff09;五、方法区&#xff08;元数据区&#xff09;前言 JVM 是Java 运行的基…

Android:Navigation使用safe args插件传递参数

Navigation使用safe args插件传递参数1、 使用配置2、举例说明1、MainActivity2、AvalFragment, DovomFragment2.1、AvalFragment2.2、DovomFragment参考1、 使用配置 afe args与传统传参方式相比&#xff0c;好处在于安全的参数类型&#xff0c;并且通过谷歌官方的支持&#…

GameFrameWork框架(Unity3D)使用笔记(六)游戏主流程ProcedureMain——从数据表加载出所需实体

目录 前言&#xff1a; 一、Entity配置表 1、创建数据表 2、创建数据表行类 二、Character配置表 1、创建数据表 2、写数据表行类 三、加载数据表 四、扩展一下Entity模块 五、应用Character数据表的位置信息 六、测试 总结&#xff1a; 前言&#xff1a; 上一篇中我…

第2章 Elasticsearch入门

2.1 Elasticsearch 安装 2 . 1 .1 下载软件 Elasticsearch的官方地址&#xff1a;www.elastic.co/cn/ Elasticsearch最新的版本是7.11.2&#xff08;截止2021.3.10&#xff09;&#xff0c;我们选择7.8.0版本&#xff08;最新版本半年前的版本&#xff09; 下载地址&#x…

贝叶斯网络

贝叶斯网络的独立性&#xff1a; 当一个结点G的父节点已知的时候&#xff0c;该结点G与其所有非后代结点条件独立 交叉因果推断&#xff1a;如上述图中的例子,对于P&#xff08;i | g | d&#xff09;等于说是中D到I 这条路径中&#xff0c;做半边的路径是顺着箭头走的&#x…

表白墙(前端+后端+数据库)

目录 一、创建项目 1、创建maven项目&#xff0c;引入依赖 2、创建目录结构 二、前端代码 1、页面内容和样式 2、提交按钮的点击事件 3、发送GET请求 三、数据库 四、后端代码 1、重写doPost方法 1.1 创建Message类 1.2 重写doPost方法 1.3 实现save方法 2、重写…

你需要知道的50颗卫星:地球卫星清单

开放数据卫星 1陆地卫星 地球资源卫星令人难以置信的长期遗产已经保存了地球40多年的历史。通过无数的应用程序&#xff0c;它甚至发现 island Landsat in Canada。 图片来源&#xff1a;NASA 2哨兵 作为 Copernicus Programme 哨兵的6个任务的舰队是一个游戏改变者。明确地…

2022年经典散文:滚烫的石板

滚烫的石板 ——灵遁者 此刻&#xff0c;我想表达的情愫大概有千万种&#xff0c;如何表达并不容易&#xff0c;就好像一个人的时候&#xff0c;也在面对某个我认识或者不认识的人&#xff0c;话总是说不清&#xff0c;也说不出来。 小孩总是敢于表达的&#xff0c;就像一条没…

.NET 7 的 AOT 到底能不能扛反编译?

一&#xff1a;背景 1.讲故事 在B站&#xff0c;公众号上发了一篇 AOT 的文章后&#xff0c;没想到反响还是挺大的&#xff0c;都称赞这个东西能抗反编译&#xff0c;可以让破解难度极大提高&#xff0c;可能有很多朋友对逆向不了解&#xff0c;以为用 ILSpy,Reflector,DnSpy…

群勃龙-半琥珀酸酯(TR-HS)与BSA牛血清白蛋白偶联 TR-HS-BSA

产品名称&#xff1a;群勃龙-半琥珀酸酯与牛血清白蛋白偶联 英文名称&#xff1a;TR-HS-BSA 用途&#xff1a;科研 状态&#xff1a;固体/粉末/溶液 产品规格&#xff1a;1g/5g/10g 保存&#xff1a;冷藏 储藏条件&#xff1a;-20℃ 储存时间&#xff1a;1年 牛血清中的简单蛋白…

全光谱台灯对孩子眼睛有影响吗?什么样的全光谱台灯真的有用

全光谱台灯对眼睛当然是有影响的&#xff0c;因为光谱成分丰富度与太阳光类似&#xff0c;所以无限接近于太阳光的显色能力&#xff0c;这样的灯光下物体的色差如同沐浴太阳光一般真实&#xff0c;色差不失真&#xff0c;人眼自然就越舒服。 那么什么样的全光谱台灯有用呢&…

Python|excel表格数据一键转json格式小工具|支持xlsx、xls格式转json|【源码+解析】

背景 最近在使用JavaScript编写一些浏览器RPA脚本&#xff0c;脚本使用过程中遇到一些问题&#xff0c;脚本使用的数据往往存放在excel表&#xff0c;但运行时只能读取json数据&#xff0c;导致频繁人工excel转json&#xff0c;效率低下。 遇到问题后赶紧搜索excel转json小工…

基于PHP+MySQL药品信息查询系统(含论文)

本系统阐述了医药信息查询系统的开发过程,并对该系统的需求分析及系统需要实现的设计方法作了介绍。该系统的基本功能包括用户注册登录,查看医药资讯,医药查询和在线留言等信息。 本系统技术介绍:php,mysql,apache,notepad,sublime.运行环境wamp,PHPstudy,xammp等php集成环境. …

FastAPI使用typing类型提示

typing是Python标准库&#xff0c;用来做类型提示。FastAPI使用typing做了&#xff1a; 编辑器支持&#xff1b; 类型检查&#xff1b; 定义类型&#xff0c;request path parameters, query parameters, headers, bodies, dependencies等等&#xff1b; 类型转换&#xff1…

去中心化应用的终极是应用链?

互操作性是近期在Web3兴起的概念&#xff0c;是指不同的计算机系统、网络、操作系统和应用程序一起工作并共享信息的能力。随着链上通信、语义交互逐渐复杂&#xff0c;链上用户多样的需求已然超出应用在单条链可承受的技术能力。 原本视作创新实验的Web3应用逐渐被公众接纳&am…

初识变量和数据类型

JavaScript第2天 输入输出语句 输出语句 alert(变量) > 弹出document.write(变量) > 输出在页面上面console.log(变量) > 打印在控制台上 /* JS的输出语句 */ alert("弹出") document.write("直接在写页面上面") console.log("打印在控制…

MacOS 如何选择鼠标不飘滚动平滑

MacOS 如何选择鼠标不飘滚动平滑 前言 今天不务正业的聊聊 macos 下的鼠标的事情&#xff0c;群里也有朋友和我聊&#xff0c;正好说说这事。 我在很长的时间里都在用 macbook pro 的触控板 键盘的高效模式&#xff0c;因为触控板和键盘很近所以效率很高。 但是有一个问题就是…