数据结构·二叉树(1)

目录

1 树的概念及结构

1.1 树的结构

1.2 树的概念

1.3树的表示

2 二叉树的概念及结构

2.1二叉树的概念

2.2 特殊的二叉树

2.3 二叉树的存储结构


1 树的概念及结构

1.1 树的结构

前面所学到的顺序表链表等,都是线性的数据结构,今天介绍的树,是一种非线性的数据结构,因为它看起来像一棵倒挂的树,所以这种结构被称为树。

在树形结构中,树的子集之间是不能有交集的,也就是子集中的交点不能相交。

这种结构不是树,因为子树之间有相交。

1.2 树的概念

以这张图为例:
节点的度:每个节点的子节点数目被称为度,如A的度为6.

叶节点或终端节点:度为0的节点被称为叶节点,也就是终端节点,如B,C, H, I。

非终端节点或分支节点:度不为0的节点被称为非终端节点,如D,E,F G。

双亲节点或父节点:该节点的上一个节点被称为双亲结点,一般为了简易称父节点,如B,C,D,E的父节点都是A。

孩子节点或子节点:同父节点,父节点的孩子的节点被称为子节点,如H是D的子节点。

兄弟节点:父节点相同的两个或多个节点之间被称为兄弟节点,如K,L,M是兄弟节点。

树的度:一棵树的度是所有节点中最大的度,如A的度是6,是所有节点里面最大的,所以树的度为6。

节点的层次:从根开始为第一层,往下一个节点层数加一,一般默认根为第一层(可以从第0层开始)。

树的高度或者深度:层次的最大值就是树的高度。

堂兄弟节点:父节点在同一层的节点是堂兄弟节点,如H 和 I 。

节点的祖先:从该节点的线路一直往上遍历,所有的节点都是该节点的祖先,如A是所有节点的祖先。

子孙:某节点之下的所有子树的节点都是该节点的子孙。

森林:互不相交的n棵树(n >=2)组成的集合叫做森林。

1.3树的表示

树有许多种表示方法,不同于顺序表链表,它常用的表示方法有孩子兄弟表示法

//孩子兄弟表示法
struct Tree
{struct Tree* child;struct Tree* Brother;int val;
};

如上。

树的表示方法有许多种,我们可以根据实际情况进行选取。

树的应用穿插在我们身边,如电脑中的文件,打开一个会有子文件,这就是树的应用。


2 二叉树的概念及结构

2.1二叉树的概念

倘若我们学习节点很多且不确定数量的树,难度是十分大的,所以为了便于理解,我们学习二叉树:
二叉树顾名思义,至多有两个节点的树状结构就是二叉树,同理,N叉树就是节点至多有N个的树状结构。

结合树的概念,我们知道二叉树的子树可以分为左子树和右子树,并且度不能超过2,二叉树实际上就是由空节点,根节点,左子树,右子树,左右子树均存在复合而成的。

2.2 特殊的二叉树

特殊的二叉树分为完全二叉树和满二叉树。

满二叉树:满二叉树除了最后一层的节点度全为0,其余节点的度都是2。

完全二叉树:完全二叉树可以说是特殊的满二叉树,完全二叉树在满二叉树的基础上允许倒数第二层的节点的度不全为0,但是最后一层从左到右的节点必须挨着。

 

2.3 二叉树的存储结构

二叉树存储分为顺序存储和链式存储,这里有个问题:二叉树相对于顺序表和链表的优势在哪里?

实际上,如果我们只是为了存储数据,二叉树的价值是远远不如顺序表和链表的,存储数据多简单,顺序表链表轻松搞定。

二叉树的优势是在于搜索,存储只是一方面,搜索方面二叉树才是强项,如后面介绍的,AVL树,红黑树等。

二叉树的物理结构是数组,逻辑结构是二叉树,真正实现的时候存储数据也是用数组存储的。

所以下一篇介绍的就是二叉树的顺序存储,称为堆,这个堆是数据结构的堆,而不是操作系统的堆。


感谢阅读!

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

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

相关文章

电脑卸载软件怎么清理干净?电脑清理的5种方法

随着我们在电脑上安装和卸载各种软件,很多时候我们会发现,即使软件被卸载,其残留的文件和注册表项仍然存在于电脑中,这不仅占用了宝贵的磁盘空间,还可能影响电脑的性能。那么,如何确保在卸载软件时能够彻底…

mysql - 缓存

缓存 InnoDB存储引擎在处理客户端的请求时,当需要访问某个页的数据时,就会把完整的页的数据全部加载到内存中,也就是说即使我们只需要访问一个页的一条记录,那也需要先把整个页的数据加载到内存中。将整个页加载到内存中后就可以…

计算机三级——网络技术(综合题第五题)

第一题 填写路由器RG的路由表项①至④。 目的网络/掩码长度输出端口输出端口172.19.63.192/30S0(直接连接)172.19.63.188/30S1(直接连接) 路由器RG的S0的IP地址是172.19.63.193,路由器RE的S0的IP地址是172.19.63.194。 【解析】…

VPCFormer:一个基于transformer的多视角指静脉识别模型和一个新基准

文章目录 VPCFormer:一个基于transformer的多视角指静脉识别模型和一个新基准总结摘要介绍相关工作单视角指静脉识别多视角指静脉识别Transformer 数据库基本信息 方法总体结构静脉掩膜生成VPC编码器视角内相关性的提取视角间相关关系提取输出融合IFFN近邻感知模块(NPM) patch嵌…

【C++】虚拟继承 组合

目录 一、虚拟继承 🌟【非虚拟内存分布】 🌟【虚拟继承内存分布】 🌟【虚拟继承读取】 🌟【练习检验】 🌟【继承的总结和反思】 二、组合 🌟【继承和组合】 🌟【前言回顾】 上一篇文章我们…

MATLAB和ROS联合仿真参考资料

参考文章: MATLAB和ROS联合仿真篇(从MATLAB获取ROS信息)链接

每日一题|djwcb【算法赛】|字符串快速幂

每日一题|djwcb【算法赛】 djwcb 心有猛虎,细嗅蔷薇。你好朋友,这里是锅巴的C\C学习笔记,常言道,不积跬步无以至千里,希望有朝一日我们积累的滴水可以击穿顽石。 djwcb 注意: 快速幂字符串,看…

手写springboot启动器, 学习SpringBoot的最佳实践

自己手写的SpringBoot启动器, 是一个学习了解SpringBoot启动逻辑和了解springboot原理的不错的实践Demo. 废话不多说,直接上代码: 项目结构 maven多项目结构, myspringboot 自己手写的SpringBoot启动器 service-demo 用来测试SpringBoot启动器的示例项目 项目pom依赖 1.…

python、execl数据分析(数据描述)

一 python 1.各函数 1.1python库的安装与导入 #pip install os#pip install matplotlib#pip install seaborn#pip install scikit-learn#pip install scipy#修 改 工 作 目 录import osos.getcwd () # 查看当前工作环境os.chdir( F :\my course\database ) # 修改工作环境o…

fifo ip核 ————读写时钟同步

1.原理 timescale 1ns/1ns module tb_fifo();reg sys_clk ; reg sys_rst_n ; reg [7:0] pi_data ; reg rd_req ; reg wr_req ; reg [2:0] cnt;wire empty ; wire full ; wire [7:0] po_data ; wire [7:0] usedw ;initial begins…

力扣HOT100 - 283. 移动零

解题思路: 双指针 指针 i 用于寻找不为零的位置 指针 j 用于寻找为零的位置 不为零时,自己与自己交换,i 和 j 同时向下一个位置移动 为零时,nums[ i ]与nums[ j ]交换,使零向后移动 class Solution {public void…

总结虚函数表机制——c++多态底层原理

前言: 前几天学了多态。 然后过去几天一直在测试多态的底层与机制。今天将多态的机制以及它的本质分享给受多态性质困扰的友友们。 本节内容只涉及多态的原理, 也就是那张虚表的规则,有点偏向底层。 本节不谈语法!不谈语法&#x…

发布文章积分自动增加

controller ApiOperation(value "添加文章")PostMapping("/addwengzhang")public String addwengzhang(RequestBody WengDto wengDto) {if (wengDto.getContent() null || wengDto.getTitle() null) {return "参数不可为空";}User user user…

【MySQL】InnoDB引擎

逻辑结构 InnoDB存储引擎逻辑结构如图所示: Tablespace:表空间,一个数据库可以对应多个表空间。数据库中的每张表都有一个表空间,用来存放表记录、索引等数据。 Segment:段,表空间中有多个段&#xff0c…

第九届蓝桥杯大赛个人赛省赛(软件类)真题C 语言 A 组-乘积尾零

solution 找末尾0的个数&#xff0c;即找有多少对2和5 >问题等价于寻找所给数据中&#xff0c;有多少个2和5的因子&#xff0c;较少出现的因子次数即为0的个数 #include <iostream> using namespace std; int main() {// 请在此输入您的代码printf("31");…

Java代码基础算法练习-搬砖问题-2024.03.25

任务描述&#xff1a; m块砖&#xff0c;n人搬&#xff0c;男搬4&#xff0c;女搬3&#xff0c;两个小孩抬一砖&#xff0c;要求一次全搬完&#xff0c;问男、 女、小孩各若干&#xff1f; 任务要求&#xff1a; 代码示例&#xff1a; package M0317_0331;import java.util.S…

二手车交易网站|基于JSP技术+ Mysql+Java+ B/S结构的二手车交易网站设计与实现(可运行源码+数据库+设计文档)

推荐阅读100套最新项目 最新ssmjava项目文档视频演示可运行源码分享 最新jspjava项目文档视频演示可运行源码分享 最新Spring Boot项目文档视频演示可运行源码分享 2024年56套包含java&#xff0c;ssm&#xff0c;springboot的平台设计与实现项目系统开发资源&#xff08;可…

快速熟悉ElasticSearch的基本概念

1.全文检索 全文检索是通过文本内容进行全面搜索的技术。通过全文检索可以快速地在大量文本数据中查找包含特定关键词或者短语的文档&#xff0c;并且返回相关的搜索结果。 检索和查询的区别 检索没有搜索条件边界&#xff0c;检索的结果取决于相关性&#xff0c;相关性计算…

VUE:内置组件<Teleport>妙用

一、<Teleport>简介 <Teleport>能将其插槽内容渲染到 DOM 中的另一个位置。也就是移动这个dom。 我们可以这么使用它: 将class为boxB的盒子移动到class为boxA的容器中。 <Teleport to".boxA"><div class"boxB"></div> &…

OC高级编程 第3章:Grand Central Dispatch

3.1 Grand Central Dispatch (GCD)概要 3.1.1什么是GCD Grand Central Dispatch&#xff08;GCD&#xff09;是异步执行任务的技术之一。一般将应用中记述线程管理用的代码在系统级中实现。开发者只要定义想执行的任务并追加到Dispatch Queue中&#xff0c;GCD就能生成必要的…