7.3树形查找

news2024/9/29 18:59:40

7.3.1二叉排序树

1.定义

目的:提供查找删除,插入关键字的速度

二叉排序树的特性:

  1. 左子树<根节点<右子树
  2. 左右字数也分别是一棵二叉树

对二叉排序树进行中序遍历,可以得到一个递增的有序序列

2.二叉排序树的查找

 查找从根节点开始,沿分支逐层向下比较的过程

  1. 二叉排序树非空则定值与根节点数据比较
  2. 小于,则在左子树上查找,循环1,2,3
  3. 大于,则在右子树上查找,循环1,2,3
/*二叉排序树的查找*/
BST* BST_Search(BiTree T,ElemType key) {
	while (T!=Null&&key!=T->data) {//若数空或等于其根节点的值,则结束循环
		if (key < T->data) T = T->lchild;//若key小于当前值则在左子树上查找
		else  T = T->rchild;	//若key大于当前值则在右子树上查找
	}
	return T;
}

3.二叉排序树的插入

插入节点过程:

  1. 二叉树为空直接插入
  2. 若关键字k<根节点值,则插入到左子树
  3. 若关键字k>根节点值,则插入到右子树
  4. 若关键字k=根节点值,则插入失败,二叉排序树不允许两个相同的值存在

最坏时间复杂度o(h)

/*二叉树的插入*/
int BST_Insert(BiTree &T,KeyType k){
	if (T==NULL)
	{
		T = (BiTree)malloc(sizeof(BSTNode));//创建新节点
		T->data = k;
		T->lchild = T->rchild = NULL;
		return 1;
	}
	else if (k==T->data) {//树中已有此数
		return 0;//插入失败
	}
	else if(k< T->data)//key<T->data,则进入左子树
	{
		BST_Insert(T.lchild,k);
	}
	else {

		BST_Insert(T.rchild,k);
	}

}

4.二叉排序树的删除

1.删除叶子节点---nobody cares

2.删除node只有左子树和右子树

3.删除节点既有左子树,又有右子树

        法一:找到被删除节点的直接后继

        法二:找到被删除节点的直接前驱

5.二叉排序树的查找效率分析

主要取决于树的高度

最好情况  二叉排序树左右子树高度差不超过1,则时间复杂度为log2n

最坏情况  二叉排序树只有一个左子树or右子树,则时间复杂度为n

7.3.2平衡二叉树

1.定义

任意节点左子树右子树之差不超过1的树为平衡二叉树

出现是为了预防二叉排序树高度增长过快

平衡因子=左子树高度-右子树高度={-1,0,1}

2.平衡二叉树的插入及"不平衡"问题

1.保证"左<中<右"

2.保证平衡

3.最小不平衡字数:插入路径上离插入节点最近的平衡因子的绝对值大于1的节点作为根的子树

平衡二叉树的插入及调整操作

LL

右单旋转将父节点右旋代替爷节点作为根节点,爷节点为父节点的右孩子
RR

左单旋转

将父节点左旋代替爷节点作为根节点,爷节点作为父节点的左孩子

LR先左上旋,再右上旋...
RL先右上旋,再左上旋......

3.平衡二叉树的删除

4.查找效率分析

7.3.3红黑树

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

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

相关文章

中国的“地理中心”在哪里?

我国是一个海陆兼备的国家&#xff0c;无论是960万平方公里的辽阔&#xff0c;还是300万平方公里的澎湃。 从南到北&#xff0c;自西向东&#xff0c;跨越了五个时区&#xff0c;涵盖了多种地形和气候。 那么&#xff0c;中国的“地理中心”到底在哪里呢&#xff1f; 大地原…

Azure OpenAI检索增强微调:使用 GPT-4o 对 GPT-4o mini 进行微调,以适应特定领域的应用

定制是关键&#xff01; 生成式人工智能对企业最有影响力的应用之一是创建自然语言界面&#xff0c;这些界面经过定制&#xff0c;可以使用特定领域和用例数据来提供更好、更准确的响应。这意味着回答有关特定领域的问题&#xff0c;例如银行、法律和医疗领域。 我们经常谈…

【Linux第五课-进程上】PCB内部属性、标识符、进程状态、Linux下的进程状态、进程的优先级、Linux进程的调度与切换

目录 体系结构 -- 硬件上操作系统 -- 软件上进程PCB内部属性1、在linux里面看程序2、标识符获取程序的标识符父进程标识符 PPID查看进程的另一种方法通过系统调用创建进程 - fork杀掉一个进程for循环创建多个代码 3、进程状态进程排队 - 队列教程上关于进程状态表述运行阻塞&am…

ubuntu2204操作系统使用可执行文件方式安装docker-compose记录

文章目录 前言一、版本信息二、操作步骤2.1 确认版本2.2 下载部署2.官网参考3.docker-compose版本 总结 前言 记录一下在ubuntu操作系统上使用下载可执行文件方式部署docker-compose的记录。 一、版本信息 操作系统版本&#xff1a; docker-compose版本&#xff1a; 备注&…

RISC-V开发 linux下GCC编译自定义指令流程笔记

第一步&#xff1a;利用GCC提供了内嵌汇编的功能可以在C代码中直接内嵌汇编语言 第二步&#xff1a;利用RSIC-V的中的.insn模板进行自定义指令的插入 第三步&#xff1a;RISC-V开发环境的搭建 C语言插入汇编 GCC提供了内嵌汇编的功能可以在C代码中直接内嵌汇编语言语句方便了…

Vue3.0面试题汇总

Composition API 可以说是Vue3的最大特点&#xff0c;那么为什么要推出Composition Api&#xff0c;解决了什么问题&#xff1f; 通常使用Vue2开发的项目&#xff0c;普遍会存在以下问题&#xff1a; 代码的可读性随着组件变大而变差每一种代码复用的方式&#xff0c;都存在缺…

【Linux基础IO】Linux IO编程入门:揭秘动态库与静态库的秘密

&#x1f4dd;个人主页&#x1f339;&#xff1a;Eternity._ ⏩收录专栏⏪&#xff1a;Linux “ 登神长阶 ” &#x1f921;往期回顾&#x1f921;&#xff1a;Linux Shell &#x1f339;&#x1f339;期待您的关注 &#x1f339;&#x1f339; ❀Linux基础IO &#x1f4d2;1. …

Mysql梳理10——使用SQL99实现7中JOIN操作

10 使用SQL99实现7中JOIN操作 10.1 使用SQL99实现7中JOIN操作 本案例的数据库文件分享&#xff1a; 通过百度网盘分享的文件&#xff1a;atguigudb.sql 链接&#xff1a;https://pan.baidu.com/s/1iEAJIl0ne3Y07kHd8diMag?pwd2233 提取码&#xff1a;2233 # 正中图 SEL…

Git 的安装和配置

Git 是跨平台的&#xff0c;可以在 Windows&#xff0c;Linux、Unix 和 Mac 各几大平台上使用 由于笔者主要是使用 Windows&#xff0c;其他平台下安装 Git 的方法暂且不表&#xff08;可参考廖雪峰老师的博客&#xff1a;安装 Git&#xff09; ‍ Windows 安装 Git 从 Git…

【案例73】Uclient无法读取https地址添加应用

问题现象 客户做了一个https的域名转换&#xff0c;网页端是正常访问的&#xff0c;但是在uclient里面添加应用就不行了,出来两个不对的应用&#xff0c;也安装不了&#xff0c;提示失败。 问题分析 点击添加应用发现&#xff0c;本来添加地址是https://域名:外网端口&#x…

【C++报错已解决】std::bad_alloc

&#x1f3ac; 鸽芷咕&#xff1a;个人主页 &#x1f525; 个人专栏: 《C干货基地》《粉丝福利》 ⛺️生活的理想&#xff0c;就是为了理想的生活! 专栏介绍 在软件开发和日常使用中&#xff0c;BUG是不可避免的。本专栏致力于为广大开发者和技术爱好者提供一个关于BUG解决的经…

海外媒体投稿:如何运用3种国内外媒体套餐发稿突出重围?

在当今瞬息万变的经营环境中&#xff0c;突出重围营销推广是每家企业都需要思考的问题。为了能突出重围并提升影响力&#xff0c;国内外媒体套餐内容成为了一个非常受欢迎的挑选。下面我们就为大家讲解如何运用三种不同种类的国内外媒体套餐内容来推广突出重围。 2.微博营销新浪…

GIS在构建虚拟世界中的新机遇

地理信息系统&#xff08;GIS&#xff09;技术在构建虚拟世界中扮演着越来越重要的角色。随着数字孪生、虚拟现实&#xff08;VR&#xff09;、增强现实&#xff08;AR&#xff09;和混合现实&#xff08;MR&#xff09;等技术的发展&#xff0c;GIS为虚拟世界提供了地理信息和…

QT开发:基于Qt实现的交通信号灯模拟器:实现一个带有倒计时功能的图形界面应用

介绍 本文将介绍如何使用Qt框架实现一个简单的交通信号灯控制程序。本程序包括一个图形界面&#xff0c;显示红、黄、绿三色信号灯&#xff0c;并通过定时器控制信号灯的切换。同时&#xff0c;我们还将实现一个带有按钮的界面&#xff0c;用于展示信号灯的状态。 1. 安装Qt开…

Linux下的git开篇第一文:git的意义

目录 1.git版本控制器 2.git gitee&&github 3.Linux中gitee的使用 &#xff08; 三板斧 git add git commit -m " " git push &#xff09; 4.git log 查看之前的修改信息 &#xff08;所有提交日志&#xff09; 5.git status 查看工作目录与本地…

三防手机也能实现双卫星通信?智慧应急再添一员猛将!

随着可重复使用运载火箭技术取得显著进展&#xff0c;民营航天快速发展&#xff0c;商业卫星的发射成本不断降低&#xff0c;卫星通信全面普及的时代即将来临。遨游通讯提前布局双卫星通信技术&#xff0c;AORO M5-5G三防手机集成了天通卫星电话与北斗短报文两大国产通信技术。…

怎么将excel表格数据自动生成二维码?批量静态二维码转换的方法

在日常生活中&#xff0c;遇到需要大量二维码制作需求时&#xff0c;比如说需要给同一批产品生成不同编号的二维码时&#xff0c;有什么方法能够快速批量生成二维码呢&#xff1f;如果一个个二维码去制作不仅需要浪费大量的时间&#xff0c;而且也比较容易出错&#xff0c;那么…

MATLAB读取TIF文件,并可视化

在GIS领域&#xff0c;TIF文件则常用于存储地图、地形图等地理空间数据&#xff0c;TIF文件用于地理信息系统时&#xff0c;它通常包含地理坐标、投影信息等地理元数据&#xff0c;这些元数据使得图像能够与地理信息系统无缝集成&#xff0c;便于进行地理定位和分析。 1.读取T…

初始C++模板

1.泛型编程 1.1什么事泛型编程 在学习C语言时&#xff0c;我们时常会有这样的烦恼&#xff1a; 在针对每一种不同的类型变量进行函数传参或者是运算处理时&#xff0c;我们总是编写不同的函数或者是进行不同的处理&#xff0c;才能达到目的&#xff0c;这时&#xff0c;我们…

【JavaEE初阶】深入解析单例模式中的饿汉模式,懒汉模式的实现以及线程安全问题

前言&#xff1a; &#x1f308;上期博客&#xff1a;【JavaEE初阶】深入理解wait和notify以及线程饿死的解决-CSDN博客 &#x1f525;感兴趣的小伙伴看一看小编主页&#xff1a;GGBondlctrl-CSDN博客 ⭐️小编会在后端开发的学习中不断更新~~~ &#x1f973;非常感谢你的…