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

数据结构——树与二叉树

作者:几冬雪来

时间:2023年3月22日

内容:数据结构树与二叉树的讲解(介绍)

目录

前言: 

1.树的概念:

2.树与非树:

3.树的定义: 

4.树的应用:

二叉树:  

1. 特殊的二叉树:

2.二叉树结点的数量:

结尾: 


前言: 

在上一篇博客中我们讲解完毕了栈和队列的基本内容,而在栈与队列之后的每一个板块对于我们来说都是一个不小的挑战,而今天我们要讲解的就是数据结构中的——。 

1.树的概念:

 要学习一个板块的知识,我们就要先去了解它,那么什么是树呢?

对比起我们之前学习的线性数据结构的栈和队列不同树是一种非线性的数据结构,同时由n个结点组成的一个有层次关系的集合。 

而且这个树上有一个特殊的结点,我们称之为根结点,它没有前驱结点

在这里我们树也有很多需要认识的知识点。

这些我们都要有所了解。

2.树与非树:

但是在我们刚刚进入数据结构树这个板块的学习中,我们已经会被一些看起来像树但是实际上却不是树的结构误导。那么这些非树的图是怎么样的?

以上就是3种非树的情况,在这里判断一个看起来像树的数据结构究竟是不是树,我们有几种方法。 

1. 子树不相交

2.除根结点外,每个结点有且只有一个父结点

3.一棵N结点的树有N-1条边

3.树的定义: 

既然知道了树的构成及概念,那么为我们的树进行定义也是在所难免的?

那这里我们要怎么定义树呢?定义树的话,我们可以用我们以前学习过的数组定义和链表定义。 

可是这里用数组和普通链表存储的话不是很方便。要定义树的话,我们就要用到一种奇特的存储方式。

这里我们定义两个结构体指针,第一个指针指向的是我们根的第一个结点,第二个指针则是我们树中的兄弟结点。 

这种结构又被我们叫做——“左孩子右兄弟”表示法。 

4.树的应用:

虽然如此,但是实际上我们的树在我们日常生活中并不经常使用。在平常我们更多的使用二叉树来解决问题。

在我们的日常中,运用数最多的地方就是在电脑里面开辟文件等操作。

二叉树:  

简单的介绍完树后,接下来我们就要在树的基础上来开始讲解二叉树了。 

1. 特殊的二叉树:

在我们的二叉树中有两种特殊的二叉树。

第一种除了最后一行的根没有结点以外,其余的每个根都对应两个结点。这一种二叉树被我们称为——满二叉树

第二种最后一行的结点没有满,但是它们符合从左到右依次排列连续的被我们称为——完全二叉树

同时满二叉树也是一种特殊的完全二叉树

2.二叉树结点的数量:

接下来就是来计算我们二叉树结点的数量。在高度为h的满二叉树中结点的数量为多少。 

这就类似我们在数学所学习到的等差数列,最后满二叉树结点的数量为2^h - 1

那么接下来就是我们可能是完全二叉树,这里我们就要求二叉树结点的取值范围。因为是完全二叉树,所以我们的前h-1行的结点都是满的。 

因为前h-1行都是满结点,因此这里我们的结点数量为2^(h-1)-1。又因为我们最后一行最少也要一个结点,因此这里的结点就变为2^(h-1)个

在计算结点数量的时候我们也要知道一个小知识点。

对任意一棵二叉树,如果度为0其叶结点个数为n0,度为2的分支结点个数为n2,则有n0= n2 + 1,度为0的永远比度为2的多一个。

同时在满二叉树中只有度为0和度为2的,在完全二叉树中有度为1的N1,在完全二叉树中N1不是1就是0。 

结尾: 

到这里我们的树和二叉树就介绍的差不多了,但是二叉树的用法并没有就此结束,在后面我们将会介绍运用二叉树来实现我们的堆等一系列操作与题目的方法。最后希望这篇博客能让大家稍微了解一下树和二叉树。 

相关文章:

数据结构——树与二叉树

作者:几冬雪来 时间:2023年3月22日 内容:数据结构树与二叉树的讲解(介绍) 目录 前言: 1.树的概念: 2.树与非树: 3.树的定义: 4.树的应用: 二叉树&…...

vue后台管理系统

后面可参考下:vue系列(三)——手把手教你搭建一个vue3管理后台基础模板 以下代码项目gitee地址 文章目录1. 初始化前端项目初始化项目添加加载效果配置 vite.config.js2. 使用路由安装路由配置路由配置别名和跳转安装pathvite.config.jsjsco…...

spring boot 集成 postgis jar

要将 PostGIS 集成到 Spring Boot 应用程序中,需要按照以下步骤进行操作:1. 将 PostGIS JDBC 驱动程序添加到项目依赖项中。可以在 Maven 或 Gradle 中添加以下依赖项:Maven:```xml <dependency><groupId>org.postgresql</groupId><artifactId>pos…...

【Java进阶篇】——反射机制

一、反射的概念 1.1 反射出现的背景 Java程序中&#xff0c;所有对象都有两种类型&#xff1a;编译时类型和运行时类型&#xff0c;而很多时候对象的编译时类型和运行时类型不一致 Object obj new String("hello")、obj.getClass(); 如果某些变量或形参的声明类型…...

Oracle中含有recover 状态的数据文件环境中,做异机恢复

背景&#xff1a; 我们在一些恢复测试案例中&#xff0c;会经常遇到一些奇怪的问题&#xff0c;其中有的是源端数据文件不规范而导致恢复过程出错&#xff0c;比较常见的错误有&#xff1a; 数据文件名称重复&#xff08;如&#xff1a;/oradata1/user01.dbf 和 /oradata2/us…...

图像识别模型

一、数据准备 首先要做一些数据准备方面的工作&#xff1a;一是把数据集切分为训练集和验证集&#xff0c; 二是转换为tfrecord 格式。在data_prepare&#xff0f;文件夹中提供了会用到的数据集和代码。首先要将自己的数据集切分为训练集和验证集&#xff0c;训练集用于训练模型…...

[零刻]EQ12 N100 迷你主机:从开箱到安装ESXi+虚拟机

开箱先上图&#xff1a;配置详情&#xff1a;EQ12采用了Intel最新推出的N100系列的处理&#xff0c;超低的功耗&#xff0c;以及出色的CPU性能用来做软路由或者是All in one 相当不错&#xff0c;CPU带有主动散热风扇&#xff0c;在长期运行下散热完全不用担心&#xff0c;性价…...

MongoDB基础

优质博客 IT-BLOG-CN 一、简介 MongoDB是一个强大的分布式文件存储的NoSQL数据库&#xff0c;天然支持高可用、分布式和灵活设计。由C编写&#xff0c;运行稳定&#xff0c;性能高。为WEB应用提供可扩展的高性能数据存储解决方案。主要解决关系型数据库数据量大&#xff0c;并…...

【Linux】Linux基本指令(下)

前言&#xff1a; 紧接上期【Linux】基本指令&#xff08;上&#xff09;的学习&#xff0c;今天我们继续学习基本指令操作&#xff0c;深入探讨指令的基本知识。 目录 &#xff08;一&#xff09;常用指令 &#x1f449;more指令 &#x1f449;less指令&#xff08;重要&…...

基于uniapp+u-view开发小程序【技术点整理】

一、上传图片 1.实现效果&#xff1a; 2.具体代码&#xff1a; <template><view><view class"imgbox"><view>职业证书</view><!-- 上传图片 --><u-upload :fileList"fileList1" afterRead"afterRead"…...

投稿指南【NO.7】目标检测论文写作模板(初稿)

中文标题&#xff08;名词性短语&#xff0c;少于20字&#xff0c;尽量不使用外文缩写词&#xff09;张晓敏1&#xff0c;作者1,2***&#xff0c;作者2**&#xff0c;作者2*&#xff08;通信作者右上标*&#xff09;1中国科学院上海光学精密机械研究所空间激光传输与探测技术重…...

【绘图】比Matplotlib更强大:ProPlot

✅作者简介&#xff1a;在读博士&#xff0c;伪程序媛&#xff0c;人工智能领域学习者&#xff0c;深耕机器学习&#xff0c;交叉学科实践者&#xff0c;周更前沿文章解读&#xff0c;提供科研小工具&#xff0c;分享科研经验&#xff0c;欢迎交流&#xff01;&#x1f4cc;个人…...

经典七大比较排序算法 ·上

经典七大比较排序算法 上1 选择排序1.1 算法思想1.2 代码实现1.3 选择排序特性2 冒泡排序2.1 算法思想2.2 代码实现2.3 冒泡排序特性3 堆排序3.1 堆排序特性&#xff1a;4 快速排序4.1 算法思想4.2 代码实现4.3 快速排序特性5 归并排序5.1 算法思想5.2 代码实现5.3 归并排序特性…...

【网络安全工程师】从零基础到进阶,看这一篇就够了

学前感言 1.这是一条需要坚持的道路&#xff0c;如果你只有三分钟的热情那么可以放弃往下看了。 2.多练多想&#xff0c;不要离开了教程什么都不会&#xff0c;最好看完教程自己独立完成技术方面的开发。 3.有问题多google,baidu…我们往往都遇不到好心的大神&#xff0c;谁…...

素描-基础

# 如何练习排线第一次摸板子需要来回的排线&#xff0c;两点然后画一条线贯穿两点画直的去练 练线的定位叫做穿针引线法或者两点一线法 练完竖线练横线 按照这样去练顺畅 直线曲线的画法 直线可以按住shift键 练习勾线稿 把线稿打开降低透明度去勾线尽量一笔的去练不要压…...

Elasticsearch:高级数据类型介绍

在我之前的文章 “Elasticsearch&#xff1a;一些有趣的数据类型”&#xff0c;我已经介绍了一下很有趣的数据类型。在今天的文章中&#xff0c;我再进一步介绍一下高级的数据类型&#xff0c;虽然这里的数据类型可能和之前的一些数据类型有所重复。即便如此&#xff0c;我希望…...

Golang每日一练(leetDay0012)

目录 34. 查找元素首末位置 Find-first-and-last-position-of-element-in-sorted-array &#x1f31f;&#x1f31f; 35. 搜索插入位置 Search Insert Position &#x1f31f; 36. 有效的数独 Valid Sudoku &#x1f31f;&#x1f31f; &#x1f31f; 每日一练刷题专栏 …...

Web前端:6种基本的前端编程语言

如果你想在前端web开发方面开始职业生涯&#xff0c;学习JavaScript是必须的。它是最受欢迎的编程语言&#xff0c;它功能广泛&#xff0c;功能强大。但JavaScript并不是你唯一需要知道的语言。HTML和CSS对于前端开发至关重要。他们将帮助你开发用户友好的网站和应用程序。什么…...

九【springboot】

Springboot一 Spring Boot是什么二 SpringBoot的特点1.独立运行的spring项目三 配置开发环境四 配置开发环境五 创建 Spring Boot 项目1.在 IntelliJ IDEA 欢迎页面左侧选择 Project &#xff0c;然后在右侧选择 New Project&#xff0c;如下图2.在新建工程界面左侧&#xff0c…...

《程序员成长历程的四个阶段》

阶段一&#xff1a;不知道自己不知道(Unconscious incompetence) 大学期间&#xff0c;我和老师做过一些小项目&#xff0c;自认为自己很牛&#xff0c;当时还去过一些公司面试做兼职&#xff0c;但是就是不知道为什么没有回复。那个时期的我&#xff0c;压根不知道自己不知道&…...

【SpringBoot】Spring data JPA的多数据源实现

一、主流的多数据源支持方式 将数据源对象作为参数&#xff0c;传递到调用方法内部&#xff0c;这种方式增加额外的编码。将Repository操作接口分包存放&#xff0c;Spring扫描不同的包&#xff0c;自动注入不同的数据源。这种方式实现简单&#xff0c;也是一种“约定大于配置…...

uni-app基础知识介绍

uni-app的基础知识介绍 1、在第一次将代码运行在微信开发者工具的时候&#xff0c;应该进行如下的配置: &#xff08;1&#xff09;将微信开发者工具路径进行配置&#xff1b; [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-Lbyk5Jw2-16790251840…...

Word2010(详细布局解释)

目录一、界面介绍二、选项卡1、文件选项卡&#xff08;保存、打开、新建、打印、保存并发送、选项&#xff09;2、开始选项卡&#xff08;剪贴板、字体、段落、样式、编辑&#xff09;3、插入选项卡&#xff08;页、表格、插图、链接、页眉页脚、文本、符号&#xff09;4、页面…...

Spring如何实现Quartz的自动配置

Spring如何实现Quartz的自动配置1. 开启Quartz自动配置2. Quartz自动配置的实现过程2.1 核心类图2.2 核心方法3. 任务调度执行3.1 大致流程3.2 调整线程池的大小如果想在应用中使用Quartz任务调度功能&#xff0c;可以通过Spring Boot实现Quartz的自动配置。以下介绍如何开启Qu…...

计算机组成原理——作业四

一. 单选题&#xff08;共11题&#xff0c;33分&#xff09; 1. (单选题, 3分)四片74181 ALU和一片74182 CLA器件相配合,具有如下进位传递功能:________。 A. 行波进位B. 组内先行进位,组间行波进位C. 组内先行进位,组间先行进位D. 组内行波进位,组间先行进位 我的答案: C 3…...

2023前端面试题(经典面试题)

经典面试题Vue2.0 和 Vue3.0 有什么区别&#xff1f;vue中计算属性和watch以及methods的区别&#xff1f;单页面应用和多页面应用区别及优缺点&#xff1f;说说 Vue 中 CSS scoped 的原理&#xff1f;谈谈对Vue中双向绑定的理解&#xff1f;为什么vue2和vue3语法不可以混用&…...

【Linux内网穿透】使用SFTP工具快速实现内网穿透

文章目录内网穿透简介1. 查看地址2.局域网测试连接3.创建tcp隧道3.1. 安装cpolar4.远程访问5.固定TCP地址内网穿透简介 是一种通过公网将内网服务暴露出来的技术&#xff0c;可以使得内网服务可以被外网访问。以下是内网穿透的一些应用&#xff1a; 远程控制&#xff1a;通过内…...

SQL语句性能分析

1. 数据库服务器的优化步骤 当我们遇到数据库调优问题的时候&#xff0c;该如何思考呢&#xff1f;这里把思考的流程整理成下面这张图。 整个流程划分成了 观察&#xff08;Show status&#xff09; 和 行动&#xff08;Action&#xff09; 两个部分。字母 S 的部分代表观察&…...

【K3s】第28篇 详解 k3s-killall.sh 脚本

目录 k3s-killall.sh 脚本 k3s-killall.sh 脚本 为了在升级期间实现高可用性&#xff0c;当 K3s 服务停止时&#xff0c;K3s 容器会继续运行。 要停止所有的 K3s 容器并重置容器的状态&#xff0c;可以使用k3s-killall.sh脚本。 killall 脚本清理容器、K3s 目录和网络组件&a…...

生成时序异常样本-学习记录-未完待续

1.GAN&VAE&#xff5c;时间序列生成及异常注入那些事儿&#xff1a;主要讲了数据增广&#xff0c;用GAN、WGAN、DCGAN、VAE&#xff0c;有给几个代码的github的链接&#xff0c;非常有用 2.时序异常检测综述&#xff0c;写的非常好 3.自编码器原理讲解&#xff0c;后面还附…...