家庭网站建设/搜索引擎营销的手段包括

家庭网站建设,搜索引擎营销的手段包括,常见c2c网站有哪些,微信公众平台导航 wordpress模版对于二叉搜索树 , 平衡二叉树 , 以及红黑树 , 目前只需要了解背后的原理 , 不做代码实现的要求 , 重要的就是了解各种操作的时间复杂度即可 , 为set 与 map 做铺垫 一、二叉搜索树 1.1 基本概念 相较与于堆…

对于二叉搜索树 , 平衡二叉树 , 以及红黑树 , 目前只需要了解背后的原理 , 不做代码实现的要求 , 重要的就是了解各种操作的时间复杂度即可 , 为set 与 map 做铺垫

 

一、二叉搜索树

1.1 基本概念

相较与于堆,二叉搜索树是大小关系更为严格的数据结构。但是并不需要必须是⼀棵完全二叉树,也就是树的形态是任意的。如下图所示,都是二叉搜索树!

构造一棵二叉搜索树的目的  , 并不是为了排序,而是为了提高查找和输入删除关键字的速度。

1.2 查找操作

二叉搜索树的查找是从根结点开始 ,沿某个分支逐层向下比较的过程,若二叉搜索树非空,先将给定值与根结点的关键字比较,若相等,则查找成功;若不等,如果小于根结点的关键字,则在根结点的左子树上查找,否则在根结点的右子树上查找。二这也是⼀个递归的过程。
根据BST的特性(左 < 根 < 右 )
从根结点开始一路向下找
最坏情况下会从根节点开始,查找到叶子结点。因此时间复杂度是和树的高度有关的,而树高最差会 变成一条单链表,因此时间复杂度为 O(N)

1.3 插入操作

根据BST的特性(左 < 根 < 右 )
从根结点开始一路向下找,找到合适的位置,就直接插入
插入与查找的过程一致,因此时间复杂度为 O(N

1.4 构造 BST 树

二叉搜索树的构建就是不断向原来的树中插入新的结点即可。

根据序列 a = {51, 68, 59, 27, 25, 33, 75, 70} ,构造⼀棵二叉排序树

所以时间复杂度最优的情况下是 : O(logN)
根据序列 a = {25, 27, 33, 59, 75, 51, 70, 68} ,构造⼀棵二叉排序树

在极端条件下 , 时间复杂度为 O(N)  ---> oh my god ! 骤增了!!!  

在上面两个构造二叉排序树的过程中 , 虽然结点的值都相同 , 不同的构造顺序会有不同的二叉搜索树 , 会影响查找和插入的效率 。 并且 , 构造序列越有序 , 二叉搜索树的查找效率就越低 。

1.5 删除操作

对于第三个删除结点的情况 , 我们一般是把它变成情况一或二

1)若被删除结点是叶子结点,则直接删除   

----> 此时依旧会保持二叉搜索树的性质

2)若被删除结点只有左子树或者右子树,让左子树或者右子树替代

  ----> 此时依旧会保持二叉搜索树的性质

3)若被删除结点有左子树和右子树

删除 50 这个结点,并用直接前驱来替代

删除 50 这个结点,并用直接后继来替代

删除10这个结点:

注意:我们创建二叉搜索树其实并不是为了排序 , 而是为了快速插入、删除 以及查找元素。因为BST不是那么极端的话 , 树高维持在  logN 的范围 , 上述的各种操作其实是很快的 。 但是二叉搜索树的特性并不杜绝极端情况的出现 !!!

二、平衡二叉树

在介绍二叉搜索树的时候 , 在某些特定的情况下 , 二叉搜索树是会退化成单链表 , 并且各种操作的效率也会明显下降 因此我们需要一些特别的手段保证这个二叉搜素树的“平衡”,进而保证各种操作的效率 。

2.1 基本概念

平衡二叉树 , 也称AVL树 , 它是具有以下性质的二叉搜索树

1 ) 左右子树的高度差的绝对值不超过1

2 ) 左右子树分别也是平衡二叉树

如下图所示 , 结点上方的数字表示平衡因子 。 左图是一棵平衡二叉树,右图不是!

2.2 查找操作

平衡二叉树的查找 、 插入 以及 删除操 作基本上与二叉搜索树一致 , 但是需要处理操作之后的“失衡”

重点需要掌握两种处理失衡的操作:

1) 左旋

2) 右旋

由于平衡二叉树会限制树的高度不会过高  ,趋近于 log n 级别 , 因此时间复杂度为 O(logN)

左旋(结点1)的时候遇到(结点2) “挡着了” , 

1 ) 结点1 成为右孩子的左子树

2 ) 右孩子原本的左子树(结点2)成为该结点(结点1)的右子树

右旋(结点1)的时候遇到(结点2) “挡着了” , 

1 ) 结点1 成为左孩子的右子树

2 ) 左孩子原本的右子树(结点2)成为该结点(结点1)的左子树

2.3 插入操作

最小不平衡子树:
在⼆叉搜索树中插入新结点之后,插入路径的点中,可能存在很多平衡因子的绝对值大于 1 的,此时找到 距离插入结点最近的不平衡的点 以这个点为根的 子树 就是 最小不平衡子树

2.3.1 LL型 - 右单旋

LL 表示: 新结点由于插入在 T 结点的左孩子(L)的左子树(LL)中 ,从而导致失衡。如下图所示:

T失衡了: ---> 让失衡点右旋

案例: 

2.3.2 RR型 - 左单旋

RR 表示:新结点由于插入在 T 结点的右孩子(R)的右子树(RR)中,从而导致失衡。如下图所示:

 T失衡了---> 让失衡点左旋 

案例:

2.3.3 LR型 - 左右双旋

LR 表示:新结点由于插入在 T 结点的左孩子(L)的右子树(LR)中,从而导致失衡。如下图所示:

 T失衡了: -->

1) 失衡点左孩子左旋

2) 失衡点右旋 

案例: 

2.3.4 RL型 - 右左双旋

RL 表示:新结点由于插入在 T 结点的右孩子(R)的左子树(RL)中,从而导致失衡。如下图所示:

 T失衡了: -->

1) 失衡点的右孩子右旋

2) 失衡点左旋 

案例: 

2.4 构造ALV树

平衡二叉树的构造 , 就是不断向数中插入新的结点

根据序列 a = {15, 6, 10, 17, 11, 13, 9, 20, 16, 22} ,构造一棵二叉排序树

2.5 删除操作

与插入操作的思想类似,都是先按照二叉搜索树的形式操作,然后想办法使其平衡。具体步骤:
删除结点的时候 , 调整可能不止一次 , 因为插入的时候,我们是从根结点开始查找合适的插入位置 , 是符合BST的特性 , 但是删除操作的时候 , 是随机的 。

 例一:删除 30

叶子结点直接删除,删除之后向上到根节点,所有结点都没有失衡,直接结束。

  例二:删除 10 

第⼀次调整:从 10 向上找,第⼀个不平衡子树是以 49 为根的子树,高度最高的儿子是 59,高度最高的孙子是 69,呈现右孩子右孩子,因此仅需对 59 左旋⼀次。

没有第二次调整了,因为所有都已经平衡了 

  例三:删除 57 

第⼀次调整:从 57 向上找,第⼀次出现的不平衡子树是以 49 为根的子树,高度最高的儿子是
45,高度最高的孙子是 47,呈现左孩子右孩子,因此需要让 47 左旋⼀次,然后再右旋⼀次:

 

 

第二次调整:从 47 向上找,发现 59 失衡,找到最高的孩子为 69 号结点,最高的孙子为 76 号结
点,呈现的关系是右孩子右孩子,因此将 69 左旋⼀次:

 

调整结束,因为已经到了根结点,并且根节点是平衡的。 

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

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

相关文章

【蓝桥杯—单片机】第十五届省赛真题代码题解析 | 思路整理

第十五届省赛真题代码题解析 前言赛题代码思路笔记竞赛板配置建立模板明确基本要求显示功能部分频率界面正常显示高位熄灭 参数界面基础写法&#xff1a;两个界面分开来写优化写法&#xff1a;两个界面合一起写 时间界面回显界面校准校准过程校准错误显示 DAC输出部分按键功能部…

Vue3实战学习(Vue3快速搭建后台管理系统(网页头部、侧边导航栏、主体数据展示区的设计与实现)(超详细))(9)

目录 一、Vue3工程环境配置、项目基础脚手架搭建、Vue3基础语法、Vue3集成Element-Plus的详细教程。(博客链接如下) 二、Vue3集成Element-Plus详细教程。(博客链接如下) 三、Vue3集成Vue-Router详细教程。(博客链接如下) 四、Vue3快速搭建后台管理系统。(实战学习) &#xff08…

【菜鸟飞】通过vsCode用python访问deepseek-r1等模型

目标 通过vsCode用python访问deepseek。 环境准备 没有环境的&#xff0c;vscode环境准备请参考之前的文章&#xff0c;另外需安装ollama&#xff1a; 【菜鸟飞】用vsCode搭建python运行环境-CSDN博客 AI入门1&#xff1a;AI模型管家婆ollama的安装和使用-CSDN博客 选读文章…

vue中,watch里,this为undefined的两种解决办法

提示&#xff1a;vue中&#xff0c;watch里&#xff0c;this为undefined的两种解决办法 文章目录 [TOC](文章目录) 前言一、问题二、方法1——使用function函数代替箭头函数()>{}三、方法2——使用that总结 前言 ‌‌‌‌‌尽量使用方法1——使用function函数代替箭头函数()…

【如何使用云服务器与API搭建专属聊天系统:宝塔面板 + Openwebui 完整教程】

文章目录 不挑电脑、不用技术&#xff0c;云服务器 API 轻松搭建专属聊天系统&#xff0c;对接 200 模型&#xff0c;数据全在自己服务器&#xff0c;安全超高一、前置准备&#xff1a;3 分钟快速上手指南云服务器准备相关账号注册 二、手把手部署教程&#xff08;含代码块&a…

使用 PresentMon 获取屏幕帧率

PresentMon是一个用于捕获和分析Windows上图形应用程序高性能特性的工具集,最初由GameTechDev开发,现由英特尔维护和推广。PresentMon能够追踪关键性能指标,如CPU、GPU和显示器的帧持续时间和延迟等,并支持多种图形API(如DirectX、OpenGL和Vulkan)以及不同的硬件配置和桌…

中级软件设计师2004-2024软考真题合集下载

中级软件设计师2004-2024软考真题合集下载 &#x1f31f; 资源亮点&#x1f3af; 适用人群&#x1f4a1; 资源使用指南&#x1f4cc; 资源获取方式 &#x1f31f; 资源亮点 「中级软件设计师历年真题及答案解析&#xff08;2004-2024&#xff09;」 是全网最全、最新的备考资料…

艾尔登复刻Ep1——客户端制作、场景切换、网络控制

需要添加的插件内容 Netcode for GameObjects&#xff1a;是一个为 Unity 游戏开发提供高级网络功能的 SDK。它的主要作用是允许开发者在其 GameObject 和 MonoBehaviour 工作流中集成网络功能&#xff0c;并且可以与多种底层传输层协议兼容。 具体内容请看&#xff1a;https:…

2025探索短剧行业新可能报告40+份汇总解读|附PDF下载

原文链接&#xff1a;https://tecdat.cn/?p41043 近年来&#xff0c;短剧以其紧凑的剧情、碎片化的观看体验&#xff0c;迅速吸引了大量用户。百度作为互联网巨头&#xff0c;在短剧领域积极布局。从早期建立行业专属模型冷启动&#xff0c;到如今构建完整的商业生态&#xf…

文件解析漏洞练习

iis6的目录解析漏洞 (.asp目录中的所有文件都会被当做asp文件执行) 1.在iis的网站根目录新建一个名为x.asp的文件 2.在x.asp中新建一个jpg文件。内容为<%now()%> asp代码。 3.在外部浏览器中访问windows2003的iis网站中的2.jpg 发现asp代码被执行 iis6的分号截断解析漏洞…

Go Ebiten小游戏开发:俄罗斯方块

在这篇文章中&#xff0c;我们将一起开发一个简单的俄罗斯方块游戏&#xff0c;使用Go语言和Ebiten游戏库。Ebiten是一个轻量级的游戏库&#xff0c;适合快速开发2D游戏。我们将逐步构建游戏的基本功能&#xff0c;包括游戏逻辑、图形绘制和用户输入处理。 项目结构 我们的项…

## DeepSeek写水果记忆配对手机小游戏

DeepSeek写水果记忆配对手机小游戏 提问 根据提的要求&#xff0c;让DeepSeek整理的需求&#xff0c;进行提问&#xff0c;内容如下&#xff1a; 请生成一个包含以下功能的可运行移动端水果记忆配对小游戏H5文件&#xff1a; 要求 可以重新开始游戏 可以暂停游戏 卡片里的水果…

【含文档+PPT+源码】基于Django框架的乡村绿色农产品交易平台的设计与实现

项目介绍 本课程演示的是一款基于Django框架的乡村绿色农产品交易平台的设计与实现&#xff0c;主要针对计算机相关专业的正在做毕设的学生与需要项目实战练习的 Python学习者。 1.包含&#xff1a;项目源码、项目文档、数据库脚本、软件工具等所有资料 2.带你从零开始部署运…

idea超级AI插件,让 AI 为 Java 工程师

引言​ 用户可在界面中直接通过输入自然语言的形式描述接口的需求&#xff0c;系统通过输入的需求自动分析关键的功能点有哪些&#xff0c;并对不确定方案的需求提供多种选择&#xff0c;以及对需求上下文进行补充&#xff0c;用户修改确定需求后&#xff0c;系统会根据需求设…

@RestControllerAdvice注解

RestControllerAdvice RestControllerAdvice 是 Spring Framework&#xff08;3.2&#xff09;和 Spring Boot 中用于全局处理控制器层异常和统一响应格式的注解。它结合了 ControllerAdvice 和 ResponseBody 的功能&#xff0c;能够拦截控制器方法抛出的异常&#xff0c;并以 …

考研复试c语言常见问答题汇总2

11. 关键字和一般标识符有什么不同&#xff1f; C语言中关键字与一般标识符区别&#xff1a; 定义&#xff1a;关键字是C语言预定义的特殊单词&#xff08;如int、for&#xff09;&#xff0c;有固定含义&#xff1b;标识符是自定义的名称&#xff08;如变量名、函数名&#xf…

Scala编程_实现Rational的基本操作

在Scala中实现一个简单的有理数&#xff08;Rational&#xff09;类&#xff0c;并对其进行加法、比较等基本操作. 有理数的定义 有理数是可以表示为两个整数的比值的数&#xff0c;通常形式为 n / d&#xff0c;其中 n 是分子&#xff0c;d 是分母。为了确保我们的有理数始终…

若依框架-给sys_user表添加新字段并获取当前登录用户的该字段值

目录 添加字段 修改SysUser类 修改SysUserMapper.xml 修改user.js 前端获取字段值 添加字段 若依框架的sys_user表是没有age字段的&#xff0c;但由于业务需求&#xff0c;我需要新添加一个age字段&#xff1a; 修改SysUser类 添加age字段后&#xff0c;要在SysUser类 …

Android调试工具之ADB

Android Debug Bridge ADB介绍**一、ADB下载****二、ADB安装****三、ADB基础使用命令** ADB介绍 ADB&#xff08;Android Debug Bridge&#xff09;是Android开发与调试的必备工具&#xff0c;掌握它能极大提升开发效率。 一、ADB下载 Windows版本&#xff1a;https://dl.goo…

【测试框架篇】单元测试框架pytest(4):assert断言详解

一、前言 用例三要素之一就是对预期结果的断言。 何为断言&#xff1f;简单来说就是实际结果和期望结果去对比&#xff0c;符合预期就测试pass&#xff0c;不符合预期那就测试 failed。断言内容就是你要的预期结果。断言包含对接口响应内容做断言、也包含对落DB的数据做断言。…