当前位置: 首页 > news >正文

数据结构和算法——树结构

二叉树

又叫二叉排序树。

节点是数量为,2^{n}-1,n为层数。

满二叉树:所有的叶子节点都在最后一层。

完全二叉树:如果所有叶子节点都在最后一层和倒数第二层,而且每个叶子节点都有左右子节点。

完全二叉树
完全二叉树

前序遍历

1、先输出当前节点(初始是root节点)。

2、如果左子节点不为空,则递归继续前序遍历。

3、如果右子节点不为空,则递归继续前序遍历。

class HeroNode {private int no;private String name;private HeroNode left, right;
}
    public HeroNode preOrderSearch(int no) {if (this.no == no) {return this;}HeroNode resNode;if (this.left != null) {resNode = this.left.preOrderSearch(no);if (resNode != null) {return resNode;}}if (this.right != null) {resNode = this.right.preOrderSearch(no);if (resNode != null) {return resNode;}}return null;}

中序遍历

1、如果当前节点的左子节点不为空,则递归中序遍历。

2、输出当前节点。

3、如果当前节点的右子节点不为空,则递归中序遍历。

    public HeroNode infixOrderSearch(int no) {HeroNode resNode;if (this.left != null) {resNode = this.left.infixOrderSearch(no);if (resNode != null) {return resNode;}}if (this.no == no) {return this;}if (this.right != null) {resNode = this.right.infixOrderSearch(no);if (resNode != null) {return resNode;}}return null;}

后序遍历

1、如果当前节点的左子节点不为空,则递归后序遍历。

2、如果当前节点的右子节点不为空,则递归后序遍历。

3、输出当前节点。

    public HeroNode postOrderSearch(int no) {HeroNode resNode;if (this.left != null) {resNode = this.left.postOrderSearch(no);if (resNode != null) {return resNode;}}if (this.right != null) {resNode = this.right.postOrderSearch(no);if (resNode != null) {return resNode;}}if (this.no == no) {return this;}return null;}

二叉树节点的删除,如果是中间节点,则整个中间节点都删除。

    public void delNode(int no) {if (this.no == no) {return;}if (this.left != null) {if (this.left.no == no) {this.left = null;} else {this.left.delNode(no);}}if (this.right != null) {if (this.right.no == no) {this.right = null;} else {this.right.delNode(no);}}}

顺序存储二叉树

顺序二叉树通常是完全二叉树。

第n(n是下标)个元素的左子节点为 2 * n + 1

第n个元素的右子节点为 2 * n + 2

第n个元素的父节点为 (n - 1) / 2

堆排序用到顺序存储二叉树的结构。

线索化二叉树

充分的利用到了叶子节点的空指针。

class HeroNode {private int no;private String name;private HeroNode left, right;private int leftType; // 0 指向的是左子树 1指向前驱节点private int rightType; // 0 指向的是右子树 1指向后继节点
}

 对线索二叉树进行中序线索化的方法

    public void threadedNodes(HeroNode node) {if (node == null) {return;}threadedNodes(node.getLeft()); // 先线索化左子树// 再线索化当前节点if (node.getLeft() == null) { // 前驱node.setLeft(pre);node.setLeftType(1);}if (pre != null && pre.getRight() == null) { // 后继pre.setRight(node);pre.setRightType(1);}pre = node;threadedNodes(node.getRight()); // 最后线索化右子树}

线索化二叉树的中序遍历

 class ThreadedBinaryTree {private HeroNode root;private HeroNode pre = null; // 指向前驱节点public void threadedList() {HeroNode node = root;while (node != null) {while (node.getLeftType() == 0) { // 到左下角node = node.getLeft();}System.out.println(node);while (node.getRightType() == 1) {node = node.getRight();System.out.println(node);}node = node.getRight();}}
}

平衡二叉树

又叫AVL树。

B树

B+树

B*树

相关文章:

数据结构和算法——树结构

二叉树 又叫二叉排序树。 节点是数量为,,n为层数。 满二叉树:所有的叶子节点都在最后一层。 完全二叉树:如果所有叶子节点都在最后一层和倒数第二层,而且每个叶子节点都有左右子节点。 完全二叉树 前序遍历 1、先输…...

【Java】Integer包装类

Integer:对基本数据类型 int 实现包装 方法名称说明public Integer(int value)根据 int 值创建 Integer 对象(JDK9以后过时)public integer(String s)根据 String 值创建 Integer 对象&#xf…...

Web后端开发登录校验及JWT令牌,过滤器,拦截器详解

如果用户名正确则成功进入 登录功能 代码 Controller Service Mapper 结果 若登录成功结果如下: 如果登录失败,结果如下 登录校验 为什么需要登录校验 有时再未登录情况下, 我们也可以直接访问部门管理, 员工管理等功能 因此我们需要一个登录校验操作, 只有确认用户登录…...

大语言模型迎来重大突破!找到解释神经网络行为方法

前不久,获得亚马逊40亿美元投资的ChatGPT主要竞争对手Anthropic在官网公布了一篇名为《朝向单义性:通过词典学习分解语言模型》的论文,公布了解释经网络行为的方法。 由于神经网络是基于海量数据训练而成,其开发的AI模型可以生成…...

zabbix内置宏、自动发现与注册

一、zabbix内置宏 1、概念: 在Zabbix中,内置宏是一种特殊的变量,通常用在 Trigger 名称和表达式中,引用有关监控对象的信息。 2、种类: {HOST.NAME} 主机名 {HOST.IP} 主机 IP 地址 {TRIGGER.DESCRIPTION} 触…...

Oracle与Mysql语法区别

database 一、数据类型二、update..select语句三、upsert语句四、常见函数五、自动更新列时间戳一、数据类型 OracleMysqlnumberint/decimal变长字符:varchar2varchardatedatetime/timestampinttinyint/smallint/mediumint/int/bigint二、update…select语句 Oracle update t…...

Jetpack:008-Icon与Image

文章目录 1. 概念介绍2. 使用方法2.1 Icon2.2 Image 3. 示例代码4. 内容总结 我们在上一章回中介绍了Jetpack中与Button相关的内容,本章回中主要I con与Image。闲话休提,让我们一起Talk Android Jetpack吧! 1. 概念介绍 我们在本章回中介绍…...

参数解析(牛客)

目录 一、题目 二、代码 一、题目 二、代码 #include <iostream> #include <vector> using namespace std;int main() {string s;getline(cin, s);int i 0;vector<string>ret;while (i < s.size()){if (s[i] )//遇到空格直接跳过{i;}else if (s[i] …...

Linux网络编程系列之服务器编程——阻塞IO模型

Linux网络编程系列 &#xff08;够吃&#xff0c;管饱&#xff09; 1、Linux网络编程系列之网络编程基础 2、Linux网络编程系列之TCP协议编程 3、Linux网络编程系列之UDP协议编程 4、Linux网络编程系列之UDP广播 5、Linux网络编程系列之UDP组播 6、Linux网络编程系列之服务器编…...

排序算法-基数排序法(RadixSort)

排序算法-基数排序法&#xff08;RadixSort&#xff09; 1、说明 基数排序法与我们之前讨论的排序法不太一样&#xff0c;并不需要进行元素之间的比较操作&#xff0c;而是属于一种分配模式排序方式。 基数排序法比较的方向可分为最高位优先&#xff08;Most Significant Di…...

nginx绑定tomcat与tomcat联合使用的配置(nginx反向代理tomcat的配置说明)

nginx反向代理tomcat通信配置 &#xff08;内容来自网上&#xff0c;注解部分才是原创&#xff09; 切记&#xff1a; url的意思就是 unifed resource location 统一资源定位 其中location就是定位的意思 所以上文中的location就有 对应匹配的 url 标识的资源的相关配置之…...

【Java】nextInt()后面紧接nextLine()读取不到数据/InputMismatchException异常的解决方案

错误如下&#xff1a; 有时候还会抛出InputMismatchException异常 看&#xff01;我只输入了一个5&#xff0c;并没有给str赋值&#xff0c;它就已经将结果打印出来了&#xff01;这就意味着&#xff0c;str是读取到了数据的&#xff0c;只不过这个数据并不是我们想要的输入的…...

【传输层协议】UDP/TCP结构特点与原理(详解)

文章目录 1. UDP1.1 UDP结构1.2 UDP特点1. 无连接2. 不可靠3. 面向数据报4. 缓冲区5. 大小受限6. 无序性 2. TCP2.1 TCP结构2.2 TCP特点1. 有连接2. 可靠性3. 面向字节流4. 拥塞控制5. 头部开销 2.3 TCP原理1. 确认应答&#xff08;安全机制&#xff09;2. 超时重传&#xff08…...

哪种网站适合物理服务器

哪种网站适合物理服务器 看到独立服务器这一词语&#xff0c;相信大家脑海立马就浮现出了它的种种优势&#xff0c;但是有优势就伴随着也有一定的弊端&#xff0c;比如说它的空间大、特殊的的组件配置&#xff0c;权限配置等&#xff0c;但是成本却非常的高&#xff0c;那么我…...

uni-app集成使用SQLite

一、打开uni-app中SQLite 二、封装sqlite.js module.exports {dbName: chat, // 数据库名称dbPath: _doc/chat.db, // 数据库地址,推荐以下划线为开头 _doc/xxx.db/*** Description: 创建数据库 或 有该数据库就打开* author: ZXL* createTime: 2023-10-12 09:23:10* Copyr…...

Qt不能安装自己想要的版本,如Qt 5.15.2

使用在线安装工具安装Qt5.15.2时&#xff0c;发现没有Qt 5的相关版本&#xff0c;只有Qt 6的版本&#xff0c;这时选择右边的Archive&#xff0c;再点击筛选&#xff0c;这时就会出现之前的Qt版本。...

学信息系统项目管理师第4版系列28_组织级项目管理和量化项目管理

1. OPM 1.1. 旨在确保组织开展正确项目并合适地分配关键资源 1.1.1. 有助于确保组织的各个层级都了解组织的战略愿景、实现愿景的措施、组织目标以及可交付成果 1.2. 业务评估是建立OPM框架的必要组件 1.3. OPM3 是组织级项目管理成熟度模型&#xff0c;可用于评估组织项目…...

Bean实例化的三级缓存

在Spring框架中&#xff0c;Bean实例化的三级缓存&#xff08;三级缓存也称为三级缓存机制&#xff09;是用于缓存Bean定义的一种机制&#xff0c;用于管理和加速Spring容器中Bean的创建和初始化过程。三级缓存包括了singletonObjects、earlySingletonObjects 和 singletonFact…...

Jenkins+Gitlab+Docker(Dockerfile)部署

Docker部署运行 ​ 上一篇内容中使用Jenkins(运行服务器)Gitlab(代码存储库)Webhook(网络钩子)的方式部署运行我们的项目。需要我们在服务器上做好很多相关的环境配置及依赖。 ​ 那么假如有这样一个场景&#xff1a;需要把不同技术栈的项目部署到同一台服务器上运行。比如PH…...

Web前端-Vue2+Vue3基础入门到实战项目-Day4(组件的三大组成部分, 组件通信, 案例-组件版小黑记事本, 进阶语法)

Web前端-Vue2Vue3基础入门到实战项目-Day4 组件的三大组成部分(结构/样式/逻辑)scoped样式冲突data是一个函数 组件通信组件通信语法父传子子传父props详解什么是propsprops检验props与data的区别 非父子(扩展)事件总线 (event bus)provide - inject 案例 - 小黑记事本(组件版)…...

【大模型应用开发教程】01_大模型简介

C1 大模型简介 一. 什么是LLM&#xff08;大语言模型&#xff09;&#xff1f;1. 发展历程2. 大语言模型的概念LLM的应用和影响 二、大模型的能力和特点1. 大模型的能力1.1 涌现能力&#xff08;emergent abilities&#xff09;1.2 作为基座模型支持多元应用的能力1.3 支持对话…...

Flume 简介及基本使用

1.Flume简介 Apache Flume 是一个分布式&#xff0c;高可用的数据收集系统。它可以从不同的数据源收集数据&#xff0c;经过聚合后发送到存储系统中&#xff0c;通常用于日志数据的收集。Flume 分为 NG 和 OG (1.0 之前) 两个版本&#xff0c;NG 在 OG 的基础上进行了完全的重构…...

行业追踪,2023-10-11

自动复盘 2023-10-11 凡所有相&#xff0c;皆是虚妄。若见诸相非相&#xff0c;即见如来。 k 线图是最好的老师&#xff0c;每天持续发布板块的rps排名&#xff0c;追踪板块&#xff0c;板块来开仓&#xff0c;板块去清仓&#xff0c;丢弃自以为是的想法&#xff0c;板块去留让…...

Linux:进程控制

目录 一、进程创建 写时拷贝 二、进程终止 echo $? 如何终止进程 _exit与exit 三、进程等待 进程等待的必要性 进程等待的操作 wait waitpid status 异常退出情况 status相关宏 options 四、进程程序替换 1、关于进程程序替换 2、如何进行进程程序替换 程序…...

HTTP中的GET方法与POST方法

1、GET 和 POST方法之间的区别 根据 RFC 规范&#xff0c;GET 的语义是从服务器获取指定的资源&#xff0c;这个资源可以是静态的文本、页面、图片视频等。GET 请求的参数位置一般是写在 URL 中&#xff0c;URL 规定只能支持 ASCII&#xff0c;所以 GET 请求的参数只允许 ASCI…...

2023年10月16日-10月22日,(光追+ue+osg继续按部就班进行即可。)

根据月计划&#xff0c; 本周计划如下&#xff1a; 2023年10月16日-10月22日&#xff0c;光追10.7-10.13&#xff0c;ue rpg(p47-p53),ue5底层渲染01A19-01B4,osg29,osg30,filament文档每天看 落实到天就是 2023年10月16日光追10.7&#xff0c;ue rpg(p47),ue5底层渲染01A19,o…...

【Docker】命令使用大全

【Docker】命令使用大全 目录 【Docker】命令使用大全 简述 Docker 的主要用途 基本概念 容器周期管理 run start/stop/restart kill rm pause/unpause create exec 容器操作 ps inspect top attach events logs wait export port 容器 rootfs 命令 c…...

查找算法:二分查找、插值查找、斐波那契查找

二分查找 查找的前提是数组有序 思路分析 代码实现 # 二分查找&#xff08;递归法实现&#xff09; # 找到一个相等的值就返回该值的下标 def binary_search(arr: list, find_val: int, left: int, right: int):mid (left right) // 2 # 寻找数组中间位置的下标if left &…...

python+django高校教室资源预约管理系统lqg8u

技术栈 后端&#xff1a;pythondjango 前端&#xff1a;vueCSSJavaScriptjQueryelementui 开发语言&#xff1a;Python 框架&#xff1a;django/flask Python版本&#xff1a;python3.7.7 数据库&#xff1a;mysql 数据库工具&#xff1a;Navicat 开发软件&#xff1a;PyChar…...

Potato靶机

信息搜集 设备发现 扫描端口 综合扫描 开放了80端口的HTTP服务和7120端口的SSH服务 目录扫描 扫描目录 看看这个info.php&#xff0c;发现只有php的版本信息&#xff0c;没有可以利用的注入点 SSH突破 hydra 爆破 考虑到 7120 端口是 ssh 服务&#xff0c;尝试利用 hydra …...

老板说做个网站我要怎么做/如何宣传推广自己的店铺

这篇文章主要讲讲 docker 中镜像有关的知识&#xff0c;将涉及到下面几个方面&#xff1a;docker images 命令的使用docker 和 registry 交互的过程&#xff0c;pull 命令到底做了什么docker storage driveraufs 的格式和实际的组织结构Dockerfile 原语和 docker 镜像之间的关系…...

怎样用网站做淘宝客/杭州优化商务服务公司

title: 2018.9.2 OSI七层模型及数据的传输过程 tags: 计算机网络, OSI七层模型, 数据传输, 数据解封装 --- OSI七层模型和TCP/IP五层模型 OSI七层模型 我们说的七层模型第七层都是应用层&#xff0c;第一层是最底下的物理层。 图中只有物理层之间的线条是实线的&#xff0c;可以…...

网站备案信息真实性核验单怎么填写/制作网页的流程

搜索引擎技术发展简析 文章作者&#xff1a;中国科技信息研究所研培中心 化柏林 未来搜索引擎技术将如何发展&#xff1f;随着人工智能技术的进一步成熟和信息服务的多样化&#xff0c;搜索引擎向着智能化、个性化方向发展。  随着“眼球经济”席卷互联网&#xff0c;成千…...

做外贸常用的网站有哪些/谷歌优化排名怎么做

SAP CO模块 KSV5 费用分摊分配解析 2018年07月18日 13:22:40 SAP小菜鸟鸟 阅读数&#xff1a;2073 CO成本控制是SAP财务的一大难点&#xff0c;有些地方可能会比较绕&#xff0c;但是捋顺思路&#xff0c;其实也还行。 (文中所有数据来源皆为作者杜撰&#xff0c;请勿对号入…...

网站建设的总体目标/青岛新闻最新今日头条

在用vue做 移动端项目的时候. 特别是调用相机拍照的时候有些手机会旋转照片,导致拍出来是 歪的, 横着的, 这里记录下怎么解决这个问题. demo 请狠狠的戳这里 https://download.lllomh.com/cliect/#/product/A810032847082261 1, 安装 compressorjs 插件,导入 import Comp…...

做网站去除视频广告/网络推广公司主要做什么

格式1&#xff1a; 数据类型[][] 变量名new 数据类型[m][n]; m表示这个二维数组有多少个一维数组 n表示每个一维数组有多少个元素 int[][] anew int[3][4];System.out.println(a);//地址值 [[I4926097bSystem.out.println(a[0]);//地址值 [I762efe5dSystem.out.println(a[1])…...