数据结构·二叉树(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树,红黑树等。

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

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


感谢阅读!

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

第九届蓝桥杯大赛个人赛省赛(软件类)真题C 语言 A 组-第几个幸运数字

幸运数字是可以被3,5,7任一整除的数字&#xff0c;列举小明号码内的所有可能组合并计数。注意别忘了把1占的一位减去。 #include<stdio.h> typedef long long ll; int main(){long long ans 0, n 59084709587505LL;for(ll i 1; i < n; i * 3){//计算小于等于n的数…

代码随想录训练营Day32:● 122.买卖股票的最佳时机II ● 55. 跳跃游戏 ● 45.跳跃游戏II

122.买卖股票的最佳时机II 题目链接 https://leetcode.cn/problems/best-time-to-buy-and-sell-stock-ii/description/ 题目描述 思路 看完视频讲解之后豁然开朗啊简直了&#xff01;&#xff01;&#xff01; 统计后一天减去前一天&#xff0c;差值为正数的&#xff0c;再…

一篇文章带你搞定接单的多种渠道,赶紧码住!!!

相信大家也看到了不少人通过网络接单实现年入30W&#xff0c;彻底财富自由&#xff01;咱看了&#xff0c;真的很难不心痒痒&#xff0c;想加入其中&#xff0c;大干一场&#xff01;毕竟搞钱嘛&#xff01;才是王道。但是呢&#xff0c;也有很多人心向往之&#xff0c;奈何不知…

C++剑指offer与高频面试题源码解答与分析

这是博主在当初秋招刷题时候记录的剑指offer第二版以及一些高频题的C源码和解法分析&#xff0c;可以说把这上面的题练好了面试不虚&#xff0c;最后也顺利帮助我拿下baidu ali meituan等多家大厂offer。整篇文章写了大概5W个字&#xff0c;也是积累了很长一段时间的作品&#…

MYSQL通过substr函数与instr函数截取字符串

mysql通过substr函数与instr函数截取字符串 1.从字段左边开始第三位&#xff0c;截取到结束2.截取字段前三位3.截取字段后三位4.从字段右边开始第三位&#xff0c;往后截取一位5.从字段小数点的位置开始&#xff0c;向后截取两位&#xff08;使用了instr&#xff08;&#xff0…

leetcode刷题日记-外观数组

题目描述 解题思路 初始化字符串 init 为 “1”&#xff0c;作为外观数列的第一项。 通过循环迭代生成外观数列的下一项&#xff0c;循环次数为 n-1&#xff0c;因为已经初始化了第一项。 在每次迭代中&#xff0c;通过两个指针 pos 和 start 来遍历当前项 init&#xff0c;po…

22.保护性暂停扩展(一对一)

如果需要多个类之间使用GuardedObject对象&#xff0c;作为参数传递不是很方便&#xff0c;因此设计一个解耦的中间类&#xff0c;这样不仅能够解耦结果的等待者和结果生产者&#xff0c;还能够支持多个任务的管理。 Futures就好比居民楼一层的信箱&#xff0c;每个信箱有房间的…

大数据面试题 —— Flume

目录 介绍 FlumeFlume 架构请说一下你提到的几种 source 的不同点Flume 传输数据时如何保证数据一致性TailDir 为什么可以断点重传说下Flume事务机制Sink 消费能力弱&#xff0c;Channel 会不会丢失数据数千个Flume要怎么统一配置&#xff0c;修改就分发吗Flume一个节点宕机了怎…

【科研基础】分布式信源编码与中继通信

[1] Bian, Chenghong, et al. “Deep joint source-channel coding over cooperative relay networks.” arXiv preprint arXiv:2211.06705 (2022). [2] Bian, Chenghong, et al. “Process-and-Forward: Deep Joint Source-Channel Coding Over Cooperative Relay Networks.”…

还在用传统知识库?AI知识库才是企业的最优选择

在数字化和信息化日趋严重的时代&#xff0c;企业不仅要处理海量的数据&#xff0c;同时还要有效地管理和利用它们。这就使得知识库&#xff0c;作为一种集中存储、管理和共享知识资源的工具&#xff0c;被越来越多的企业所重视。然而&#xff0c;随着技术的快速迭代&#xff0…

RabbitMQ 安装保姆级教程

目录 1.MQ引言 1.1 什么是MQ 1.2 MQ有哪些 1.3 不同MQ特点 2.RabbitMQ 的引言 2.1 RabbitMQ 2.2 RabbitMQ 的安装 2.2.1 下载 2.2.2 下载的安装包 2.2.3 安装步骤 3. RabiitMQ 配置 3.1RabbitMQ 管理命令行 3.2 web管理界面介绍 3.2.1 overview概览 3.2.2 Admin用…

蓝桥杯物联网遇见的重大BUG及其产生原因和解决方法

BUG列表 1、ADC的RP2显示一直为0&#xff1a;2、LORX_Tx发送数据乱码&#xff1a;3、strcmp比较char a[2] {1, 2}与“12”字符串是否相等板子会死机&#xff1a;4、LORA_Tx和LORA_Rx放一起会接收不到数据&#xff1a;5、RTC获取到静止时间&#xff1a;6、ADC获取RP1和RP2模拟量…

基于java+springboot+vue实现的图书借阅系统(文末源码+Lw+ppt)23-328

摘 要 伴随着我国社会的发展&#xff0c;人民生活质量日益提高。于是对系统进行规范而严格是十分有必要的&#xff0c;所以许许多多的信息管理系统应运而生。此时单靠人力应对这些事务就显得有些力不从心了。所以本论文将设计一套“期待相遇”图书借阅系统&#xff0c;帮助商…

citus的快速开始

准备 dockercitus最新版本&#xff08;docker pull citusdata/citus&#xff09; docker网络 docker network create --subnet172.72.9.0/24 citus-test docker network ls启动citus服务 启动协调节点 docker run -dit --name citus-cod -p 5433:5432 -e POSTGRES_PASSWOR…

背景减除(1)--bgslibrary Windows编译和使用

入侵监控领域中&#xff0c;在固定场景下&#xff0c;需要检测和监控的入侵物体种类繁多&#xff0c;无法具体穷尽。传统的CV算法提取的特征应用场景有限&#xff0c;无法完成大量物体的监控&#xff1b;深度学习目标检测方法没法收集到无穷无尽的物体种类&#xff0c;因此监督…

MySQL数据库备份及恢复

一、数据库备份的分类 1.1 从物理与逻辑的角度 从物理与逻辑的角度&#xff0c;备份可分为物理备份、逻辑备份 物理备份:对数据库操作系统的物理文件(如数据文件日志文件等)的备份 物理备份方法 冷备份(脱机备份)是在关闭数据库的时候进行的 热备份(联机备份):数…

手撕算法-盛最多水的容器

描述 分析 两个板之间能盛下的水的量&#xff0c;取决于短板。想让两个板之间能盛下更多的水&#xff0c;需要改变短板的长度。就像水桶效应&#xff1a;那么用两个指针指向容器的两个板&#xff0c;然后每次移动较短的板即可。移动较短的板&#xff0c;可能会增大容积&#x…

Linux安装Oracle 11G

一、准备工作&#xff1a; 1、CentOS7自行安装&#xff08;64位&#xff09;&#xff0c;网络自行配置&#xff1b; 2、下载Oracle安装包&#xff1a;linux.x64_11gR2_database_1of2.zip 和 linux.x64_11gR2_database_2of2.zip &#xff1b; 3、HostName修改&#xff1a;ora…

ES6学习之路:迭代器Iterator和生成器Generator

迭代器 一、知识背景 什么是迭代器 迭代器就是在一个数据集合中不断取出数据的过程迭代和遍历的区别 遍历是把所有数据都取出迭代器注重的是依次取出数据&#xff0c;它不会在意有多少数据&#xff0c;也不会保证能够取出多少或者能够把数据都取完。比如斐波那契额数列&#…