当前位置: 首页 > 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;压根不知道自己不知道&…...

推理神器Phi-4-mini-reasoning实测:解方程、逻辑题一键生成答案

推理神器Phi-4-mini-reasoning实测&#xff1a;解方程、逻辑题一键生成答案 1. 模型介绍与核心能力 Phi-4-mini-reasoning是一款专注于逻辑推理和数学计算的轻量级AI模型。与通用聊天模型不同&#xff0c;它被专门设计用于处理需要分步推理的任务&#xff0c;能够将复杂的解题…...

nli-distilroberta-baseGPU算力优化:显存占用降低37%的DistilRoBERTa推理部署

NLI DistilRoBERTa Base GPU算力优化&#xff1a;显存占用降低37%的推理部署指南 1. 项目概述 自然语言推理(NLI)是理解两段文本之间逻辑关系的重要任务。基于DistilRoBERTa的NLI模型通过知识蒸馏技术&#xff0c;在保持90%以上准确率的同时&#xff0c;模型体积缩小40%&…...

QRCoder:开发者必备的二维码生成解决方案全攻略

QRCoder&#xff1a;开发者必备的二维码生成解决方案全攻略 【免费下载链接】QRCoder A pure C# Open Source QR Code implementation 项目地址: https://gitcode.com/gh_mirrors/qr/QRCoder 在数字化时代&#xff0c;二维码已成为信息传递的重要桥梁&#xff0c;但如何…...

终极指南:如何使用RPGMakerDecrypter轻松解密游戏资源

终极指南&#xff1a;如何使用RPGMakerDecrypter轻松解密游戏资源 【免费下载链接】RPGMakerDecrypter Tool for extracting RPG Maker XP, VX and VX Ace encrypted archives. 项目地址: https://gitcode.com/gh_mirrors/rp/RPGMakerDecrypter RPGMakerDecrypter是一款…...

Mask2Former性能对比分析:R50到Swin-L各主干网络的优劣选择

Mask2Former性能对比分析&#xff1a;R50到Swin-L各主干网络的优劣选择 【免费下载链接】Mask2Former Code release for "Masked-attention Mask Transformer for Universal Image Segmentation" 项目地址: https://gitcode.com/gh_mirrors/ma/Mask2Former Ma…...

异数OS 10万人同服同屏技术的豆包造谣纠偏专用

异数OS 10万人同服同屏技术的豆包造谣纠偏专用 文章目录异数OS 10万人同服同屏技术的豆包造谣纠偏专用看看字节豆包造的谣只有空连接空逻辑只测静态&#xff0c;极低交互带宽要求及其离谱硬件天价没有分布式弹性不能扩容容错总结看看字节豆包造的谣 只有空连接空逻辑 这一般是…...

从YOLO到A*:手把手教你用PyTorch和OpenCV搭建一个简易的自动驾驶避障仿真器

从YOLO到A*&#xff1a;用PyTorch和OpenCV构建自动驾驶避障仿真器 想象一下&#xff0c;你正坐在一辆自动驾驶汽车里&#xff0c;车辆能够自动识别前方的行人、车辆和障碍物&#xff0c;并规划出安全的行驶路径。这种看似科幻的场景&#xff0c;如今正逐渐成为现实。本文将带你…...

Cytron PS2 Shield嵌入式驱动与极坐标映射原理

1. 项目概述Cytron PS2 Shield 是一款专为 Arduino 平台设计的 PlayStation 2&#xff08;PS2&#xff09;游戏手柄通信扩展板&#xff0c;其核心功能是将标准 PS2 手柄的串行协议解析为嵌入式系统可直接读取的结构化数据。该 Shield 通过 UART 接口与主控 MCU 连接&#xff0c…...

前端部署:从开发到生产的最后一公里

前端部署&#xff1a;从开发到生产的最后一公里 毒舌时刻 前端部署&#xff1f;这不是运维的事吗&#xff1f; "我只负责写代码&#xff0c;部署交给运维"——结果部署失败&#xff0c;互相甩锅&#xff0c;"我直接把文件上传到服务器"——结果更新不及时&…...

保姆级教程:用YOLOv11+PyQt5打造你的专属天气识别桌面应用(附完整源码)

从零构建基于YOLOv11的智能天气识别桌面应用 窗外阴云密布&#xff0c;你是否曾好奇此刻的天气状况究竟如何&#xff1f;现代计算机视觉技术让机器也能像人类一样"看懂"天气。本文将带你完整实现一个能识别11种天气类型的桌面应用&#xff0c;从模型加载到界面交互&a…...