【数据结构初阶】详解“树”
目录
前言
1.树概念及结构
(1)树的概念
(2)树的名词介绍
(3)树的表示
编辑 2.二叉树概念及结构
(1)概念
(2)特殊的二叉树
(3)二叉树的性质
(4)二叉树的存储结构
总结
前言
接下来077会使用几篇文章来讲解树的相关概念,以及树的实现,结构,如何使用树,希望可以帮助到大家。
1.树概念及结构
(1)树的概念
树是一种非线性的数据结构,它是由n(n>=0)个有限结点组成一个具有层次关系的集合。把它叫做树是因为它看起来像一棵倒挂的树,也就是说它是根朝上,而叶朝下的。

如这幅图片就是一颗树,他的形状类似于我们在日常生活中所见到的树,只不过他的根在上边,叶子在下边,可以说是一颗逆置的树。
注意:树形结构中,子树之间不能有交集,否则就不是树形结构

所以说除了根节点外,所有结点只有一个父节点才能成为树。
(2)树的名词介绍

节点的度:一个节点含有的子树的个数称为该节点的度; 如上图:A的为6叶节点或终端节点:度为0的节点称为叶节点; 如上图:B、C、H、I...等节点为叶节点非终端节点或分支节点:度不为0的节点; 如上图:D、E、F、G...等节点为分支节点双亲节点或父节点:若一个节点含有子节点,则这个节点称为其子节点的父节点; 如上图:A是B的父节点孩子节点或子节点:一个节点含有的子树的根节点称为该节点的子节点; 如上图:B是A的孩子节点兄弟节点:具有相同父节点的节点互称为兄弟节点; 如上图:B、C是兄弟节点树的度:一棵树中,最大的节点的度称为树的度; 如上图:树的度为6节点的层次:从根开始定义起,根为第1层,根的子节点为第2层,以此类推;树的高度或深度:树中节点的最大层次; 如上图:树的高度为4堂兄弟节点:双亲在同一层的节点互为堂兄弟;如上图:H、I互为兄弟节点节点的祖先:从根到该节点所经分支上的所有节点;如上图:A是所有节点的祖先子孙:以某节点为根的子树中任一节点都称为该节点的子孙。如上图:所有节点都是A的子孙森林:由m(m>0)棵互不相交的树的集合称为森林;
(3)树的表示
树结构相对线性表就比较复杂了,要存储表示起来就比较麻烦了,既然保存值域,也要保存结点和结点之间的关系,实际中树有很多种表示方式如:双亲表示法,孩子表示法、孩子双亲表示法以及孩子兄弟表示法等。我们这里就简单的了解其中最常用的孩子兄弟表示法。
typedef int DataType;
struct Node
{struct Node* _firstChild1; // 第一个孩子结点struct Node* _pNextBrother; // 指向其下一个兄弟结点DataType _data; // 结点中的数据域
};
就是用一个结构体,存储该结点的数据,并且存储这个结点的第一个孩子结点,以及这个结点的下一个兄弟结点,通过这样的结构就可以实现对所有结点的遍历。

例如在我们的日常的生活中,我们的文件目录就是一个树来实现的。
2.二叉树概念及结构
(1)概念
一棵二叉树是结点的一个有限集合,该集合:1. 或者为空2. 由一个根节点加上两棵别称为左子树和右子树的二叉树组成

我们需要注意的是二叉树中结点的最大度为2,即二叉树的度最大为2。二叉树的子树有左右之分,次序不能颠倒,因此二叉树是有序树。
(2)特殊的二叉树
1. 满二叉树:一个二叉树,如果每一个层的结点数都达到最大值,则这个二叉树就是满二叉树。也就是 说,如果一个二叉树的层数为K,且结点总数是2^k-1,则它就是满二叉树。2. 完全二叉树:完全二叉树是效率很高的数据结构,完全二叉树是由满二叉树而引出来的。对于深度为K的,有n个结点的二叉树,当且仅当其每一个结点都与深度为K的满二叉树中编号从1至n的结点一一对应时称之为完全二叉树。 要注意的是满二叉树是一种特殊的完全二叉树。
完全二叉树的特点是叶子结点必须是连续的。

(3)二叉树的性质
1. 若规定根节点的层数为1,则一棵非空二叉树的第i层上最多有 2^(i-1)个结点.2. 若规定根节点的层数为1,则深度为h的二叉树的最大结点数是2^h-13. 对任何一棵二叉树, 如果度为0其叶结点个数为n0 , 度为2的分支结点个数为 n2,则有 n0= n2+14. 若规定根节点的层数为1,具有n个结点的满二叉树的深度,h=log2(n+1). (ps:h=log2(n+1) 是log以2为底,n+1为对数)5. 对于具有n个结点的完全二叉树,如果按照从上至下从左至右的数组顺序对所有节点从0开始编号,则对 于序号为i的结点有:1. 若i>0,i位置节点的双亲序号:(i-1)/2;i=0,i为根节点编号,无双亲节点2. 若2i+1<n,左孩子序号:2i+1,2i+1>=n否则无左孩子3. 若2i+2<n,右孩子序号:2i+2,2i+2>=n否则无右孩子
(4)二叉树的存储结构

typedef int BTDataType;
// 二叉链
struct BinaryTreeNode
{struct BinTreeNode* _pLeft; // 指向当前节点左孩子struct BinTreeNode* _pRight; // 指向当前节点右孩子BTDataType _data; // 当前节点值域
}
// 三叉链
struct BinaryTreeNode
{struct BinTreeNode* _pParent; // 指向当前节点的双亲struct BinTreeNode* _pLeft; // 指向当前节点左孩子struct BinTreeNode* _pRight; // 指向当前节点右孩子BTDataType _data; // 当前节点值域
};
总结
这篇文章介绍了树与二叉树的相关概念,以及树和二叉树的结构,我们知道了二叉树可以链式存储和顺序存储,从下篇文章开始我们来实现二叉树的顺序存储。
相关文章:
【数据结构初阶】详解“树”
目录 前言 1.树概念及结构 (1)树的概念 (2)树的名词介绍 (3)树的表示 编辑 2.二叉树概念及结构 (1)概念 (2)特殊的二叉树 (3࿰…...
20230304 CF855 div3 vp
Dashboard - Codeforces Round 855 (Div. 3) - Codeforces呃呃,评价是,毫无进步呃呃呃呃呃呃呃呃呃呃呃呃呃呃呃呃呃该加训了该加训了该加训了该加训了该加训了该加训了该加训了该加训了该加训了该加训了该加训了该加训了该加训了该加训了该加训了该加训…...
UML 时序图
时序图(Sequence Diagram)是显示对象之间交互的图,是按时间顺序排列的。 时序图中显示的是参与交互的对象及其对象之间消息交互的顺序。 时序图包括的建模元素主要有:对象(Actor)、生命线(Lif…...
详解进程 及 探查进程
进程的概念PCB是什么task_struct的作用如何执行进程进程的探查什么是bashps命令的使用(查看进程)创建进程探究父子进程进程的概念 简而言之,进程就是正在在执行的程序 之前说过,程序执行的第一步Windows是双击程序Linux是 ./ &a…...
汇编相关问题
汇编语言期末复习题DX:单项选择题 DU:多项选择题 TK:填空题 MC:名词解释 v JD:简答题 CXFX:程序分析题 CXTK:程序填空题 BC:编程题第1章:基础知识1、在汇编语言程序的开发…...
华为OD机试Golang解题 - 火星文计算 2 | 包含思路
华为Od必看系列 华为OD机试 全流程解析+经验分享,题型分享,防作弊指南)华为od机试,独家整理 已参加机试人员的实战技巧华为od 2023 | 什么是华为od,od 薪资待遇,od机试题清单华为OD机试真题大全,用 Python 解华为机试题 | 机试宝典文章目录 华为Od必看系列使用说明本期题目…...
成功解决configure: error: the HTTP rewrite module requires the PCRE library
文章目录 前言问题复现问题解决思考环节总结前言 大家好,我是沐风晓月,本专栏是记录日常实验中的所有疑难杂症,教程的安装,程序的bug,甚至各类报错,如果你也遇到了困惑和问题,欢迎与我一起交流学习。 另外不要解决完问题就结束了,思考环节也要好好看看哦。 问题复现…...
UNIX--GDB调试
通常,在为调试而编译时,我们会关掉编译器优化选项(-O),并打开调试选项(-g)。另外,-Wall 在尽量不影响程序行为的情况下选项打开所有 warning,也可以发现许多问题,避免一些不必要的 BUG。 GDB 命令-启动、退…...
孤单数算法
1.背景 腾讯终面:孤单的QQ号码怎么找? 问题一:有n个QQ号码,除1个孤单的QQ号码外,其余的QQ号码都是成双成对的,求这个孤单的QQ号码,要求:时间复杂度为O(n), 空间复杂度为O(1). 问题…...
triangulate_object_model_3d算子总结
目录 1.去掉固定方向的点云干扰 2.增加八叉树深度,实现更高细节级别的三角测量 3.腐蚀和膨胀,得到更平滑的点云 1.去掉固定方向的点云干扰 例程:triangulate_object_model_3d_xyz_mapping.hdev...
ZincSearch Java 客户端教程
ZincSearch Zinc 简单、强大,不了解的同学可以参见我之前的博客。今天我们这里谈谈 Java 环境如何集成 Zinc 客户端,跟如何使用的。 安装 Zinc 到 Github 的官方 Releases 下载: 我的是 Windows 开发环境,下载 zincsearch_0.4…...
数据结构(一)(嵌入式学习)
数据结构干货总结(一)基础线性表的顺序表示线性表的链式表示单链表双链表循环链表循环单链表循环双链表栈顺序存储链式存储队列队列的定义队列的常见基本操作队列的顺序存储结构顺序队列循环队列队列的链式存储结构树概念二叉树二叉树的创建基础 数据&a…...
合成复用原则-快速理解
什么是合成/聚合复用原则? 合成/聚合复用原则是在一个新的对象里面使用一些已有的对象,使之成为新对象的一部分;新的对象通过向这些对象的委派达到复用已有功能的目的。 简述为:要尽量使用合成/聚合,尽量不要使用继承…...
Scala04 方法与函数
Scala04 方法与函数 Scala 中的也有方法和函数的概念。 Scala中的 方法 是类的一部分。 Scala中的 函数 是一个对象,可以赋值给变量。 在类中定义的函数就是方法 4.1 方法 Scala 中方法 与 Java 中类似,是组成类的一部分 4.1.1 语法结构 格式&#x…...
XJTUSE专业课与实验指南(已经开源)
文章目录XJTUSE专业课与实验指南大一小学期大二上课程实验大二下课程实验大二小学期大三上课程实验大三下课程实验XJTUSE专业课与实验指南 github地址:https://github.com/yijunquan-afk/XJTUSE-NOTES.git 📄写在前面 1️⃣ 本篇文章仅供参考࿰…...
Spring面试专题
讲师:邓澎波 Spring面试专题 1.Spring应该很熟悉吧?来介绍下你的Spring的理解 1.1 Spring的发展历程 先介绍Spring是怎么来的,发展中有哪些核心的节点,当前的最新版本是什么等 通过上图可以比较清晰的看到Spring的各个时间版本…...
【truncate、delete和drop的6大区别!】
在MySQL中,truncate、delete和drop是三个常用的命令,它们可以用于删除表或表中的数据,下面是它们的六大区别: 语法不同: truncate和delete是SQL语句,drop是DDL(数据定义语言)语句。…...
如何入门Vue:掌握Vue的核心概念和基本用法
Vue是一种流行的JavaScript框架,它可以让开发者更容易地构建响应式的用户界面。Vue的设计理念是简单易懂,它的核心库只关注视图层,可以与其它库或现有项目很好地结合。在本文中,我将介绍Vue的基础概念和如何开始使用Vue。Vue的基本…...
APM飞控使用动捕等外部定位
本文初次写于2023.03.03,pixhawk飞控应该是刷写了ArduPilot 4.1以上的版本。 机载计算机通过WIFI和vrpn_ros_client获取动捕系统(vicon或者nokov)的无人机定位数据(x,y,z四元数),然…...
【vulhub漏洞复现】CVE-2013-4547 Nginx 文件名逻辑漏洞
一、漏洞详情影响版本 Nginx 0.8.41 ~ 1.4.3 / 1.5.0 ~ 1.5.7通过%00截断绕过后缀名的限制,使上传的php内容文件被解析执行。当Nginx得到一个用户请求时,首先对url进行解析,进行正则匹配,如果匹配到以.php后缀结尾的文件名&#x…...
DB2数据迁移实战:除了EXPORT/LOAD,这几种备份还原方法你试过吗?
DB2数据迁移实战:超越基础工具的高效策略全景 当测试环境的DB2数据库需要整体搬迁到新服务器时,大多数DBA的第一反应是使用EXPORT/LOAD这对经典组合。但真实场景中,数据迁移远不止简单的导出导入——表结构依赖、CLOB字段处理、编码转换、存储…...
VisualVM企业级部署指南:大规模Java应用监控最佳实践
VisualVM企业级部署指南:大规模Java应用监控最佳实践 【免费下载链接】visualvm VisualVM is an All-in-One Java Troubleshooting Tool 项目地址: https://gitcode.com/gh_mirrors/vi/visualvm VisualVM是一款功能强大的全合一Java故障排除工具,…...
Android MQTT库在Android 13上的PendingIntent兼容性适配实战
1. 崩溃日志背后的PendingIntent适配危机 那天测试同事突然跑过来说:"你的MQTT推送在Android 13上炸了!"我接过手机一看,果然闪退日志里赫然写着: java.lang.IllegalArgumentException: Targeting S (version 31 and …...
突破百度网盘限速壁垒:5步实现直链高速下载全攻略
突破百度网盘限速壁垒:5步实现直链高速下载全攻略 【免费下载链接】baiduyun 油猴脚本 - 一个免费开源的网盘下载助手 项目地址: https://gitcode.com/gh_mirrors/ba/baiduyun 你是否经历过这样的场景:加班后想下载公司共享的设计素材包ÿ…...
2025年Cursor免费续杯终极指南:绕过限制的自动化方案
1. 为什么需要Cursor免费续杯方案 作为一个长期使用AI编程工具的老用户,我完全理解学生和独立开发者面临的困境。Cursor作为一款优秀的AI编程助手,确实能大幅提升开发效率,但每月150次的免费额度对于项目开发来说实在捉襟见肘。特别是在调试和…...
避开这些坑!个人免签支付平台实战对比:蓝鲸、V云、云免签到底怎么选?
个人免签支付平台深度评测:如何根据业务需求选择最优方案? 对于独立开发者和小型站长来说,支付接入一直是令人头疼的问题。没有企业资质无法直接对接官方支付渠道,而传统的第三方支付平台又往往门槛高、手续费昂贵。近年来兴起的个…...
AI净界-RMBG-1.4入门指南:理解Alpha通道、PNG透明度与导出规范
AI净界-RMBG-1.4入门指南:理解Alpha通道、PNG透明度与导出规范 你是不是也遇到过这样的烦恼?拍了一张不错的照片,想换个背景发朋友圈,或者做电商需要把商品图抠出来,结果发现边缘抠得跟狗啃的一样,头发丝和…...
告别‘Illegal instruction’:为老旧ARM芯片(如鲲鹏920)定制MongoDB 4.4.9的完整避坑流程
为老旧ARM芯片定制MongoDB 4.4.9的完整避坑指南 当你在国产ARM服务器上部署MongoDB时,是否遇到过Illegal instruction错误?这个问题往往源于硬件与软件版本之间的指令集不匹配。本文将带你深入理解ARM架构的版本差异,并提供一套完整的解决方案…...
不止是上网:用PVE虚拟的OpenWRT旁路由解锁Docker、AdGuard Home和异地组网玩法
解锁PVE虚拟OpenWRT旁路由的进阶玩法:从Docker到智能家居中枢 在家庭网络架构中,OpenWRT旁路由早已超越了简单的网关转发角色。当它运行在PVE虚拟化环境中时,这个轻量级Linux系统(仅需1G内存)可以变身为多功能家庭网络…...
LiuJuan20260223Zimage操作系统概念学习与实验环境
LiuJuan20260223Zimage:你的随身操作系统学习与实验环境 操作系统,听起来是不是有点高深莫测?内核、进程、内存、文件系统……这些概念在课本上总是显得抽象又遥远。很多朋友学操作系统原理时都有这样的困惑:理论都懂,…...
