数据结构-二叉树-基础知识
数据结构-二叉树-基础知识
- 1.树
- 1.1什么是树
- 1.2基本概念
- 子节点、父节点
- 叶节点
- 节点的度
- 树的高度/深度
- 节点的子孙、祖先
- 1.3树与非树
- 1.4如何实现
- 1.5实例
- 2.二叉树
- 2.1什么是二叉树
- 2.2特殊的二叉树
- 满二叉树
- 完全二叉树
- 2.3性质
- 层数
- 度
- 节点
- 2.4存储结构
1.树
1.1什么是树
树型结构是一类重要的非线性数据结构。树是以分支关系定义的层次结构。
把它叫做“树”是因为它常看起来像一棵倒挂的树,也就是说它常是根朝上,而叶朝下的。

1.2基本概念
子节点、父节点
子节点也叫孩子节点。
子节点:在树形图中,当前节点的各个子树的根称为当前节点的子节点。即当前节点所直接支配的节点。
可理解为:指该节点下一层与其直接相连的节点。

A的子节点为B、C、D。
E的子节点为J、K。
对于各个子节点,它们上面的那个就叫父节点,也叫双亲节点。
B、C、D的父节点为A。
J、K的父节点为E。
叶节点
叶节点也叫终端节点、叶子。特点是度为0。

对于上图,C、F、G、H、I、J、K就是叶节点。
节点的度
节点的度:节点拥有子节点的数量。
可理解为:该节点的下一层与其直接相连的节点数。

A的度为3。
D的度为4。
树的高度/深度
指树的最大层次。

上图,树的高度为4。
节点的子孙、祖先
子孙:指该节点下面所有与其直接或间接相连的节点。
祖先:指从该节点到根所经过的所有节点。

B的子孙为E、J、K。
J的祖先为E、B、A。
A为所有节点的祖先。
1.3树与非树
对于一个树,有几个重要的特点:
- 子树不能相交。
- 除了根节点,每个节点有且仅有一个父节点。
- 有
N个节点,就有N+1条边。
反例:


1.4如何实现
左孩子右兄弟表示法。
即,在每个节点中,存储其最左边的子节点的地址、其右边那个兄弟节点的地址。
大概是这样:

typedef int DataType;
struct TreeNode
{struct TreeNode* pFistChild;struct TreeNode* pNextBorther;DataType data;
};
1.5实例
如文件夹:

2.二叉树
2.1什么是二叉树
二叉树每个节点的度最大为二,即,每个节点最多分出两个子树,且有左右之分。
每一个二叉树都由下面几种情况组合而成:

2.2特殊的二叉树
满二叉树
每层都是满的,就是满二叉树,如下面这几个:

完全二叉树
现假设有个满二叉树,有h层,那么,在第h层的最后去掉几个节点就得到完全二叉树:

需注意:满二叉树是特殊的完全二叉树。
2.3性质
层数
令根节点层数为1。
| 层数 | 1 | 2 | 3 | 4 | … | h |
|---|---|---|---|---|---|---|
| 每层最多节点数 | 1 | 2 | 4 | 8 | … | 2^(h-1) |
| 最多节点总数 | 1 | 3 | 7 | 15 | … | (2^h)-1 |
n个节点的满二叉树:层数h=log(n+1)。
度
- 对任意的二叉树,当度为
2的节点有n1个,度为0的节点有n2个,有n2=n1+1。
节点
n个节点的完全二叉树,由根节点开始从0编号。

那么,对于一个序号为k的节点,有:
k == 0,为根;k != 0,双亲节点的序号为(k-1)/2。
如对D、E:(4-1)/2 == (3-1)/2 == 1。- 当
2*k + 1 < n,左孩子序号为2k+1。 - 当
2*k + 2 < n,右孩子序号为2k+2。
2.4存储结构
可用两种结构存储,一种顺序结构,一种链式结构。
顺序结构:用数组存储,一般只适合完全二叉树,否则会造成空间浪费。
链式结构:用链表存储,用指针链接节点。
希望本篇文章对你有所帮助!并激发你进一步探索数据结构的兴趣!
本人仅是个C语言初学者,如果你有任何疑问或建议,欢迎随时留言讨论!让我们一起学习,共同进步!
相关文章:
数据结构-二叉树-基础知识
数据结构-二叉树-基础知识 1.树1.1什么是树1.2基本概念子节点、父节点叶节点节点的度树的高度/深度节点的子孙、祖先 1.3树与非树1.4如何实现1.5实例 2.二叉树2.1什么是二叉树2.2特殊的二叉树满二叉树完全二叉树 2.3性质层数度节点 2.4存储结构 1.树 1.1什么是树 树型结构是一…...
wangeditor——cdn引入的形式创建一个简易版编辑器——js技能提升
昨天同事那边有个需求,就是要实现聊天功能,需要用到一个富文本编辑器,参考如下: 上面的这个效果图是博客园的评论输入框 最终使用wangEditor编辑器实现的效果如下: 只保留了个别的菜单: 默认模式的wangE…...
9.11.
Widget::Widget(QWidget *parent): QWidget(parent), ui(new Ui::Widget), speecher(new QTextToSpeech(this)) {//设置时钟ui->setupUi(this);startTimer(1000);//文本框label居中对齐ui->label_2->setAlignment(Qt::AlignCenter);connect(this,&Widget::my_sign…...
【GeekBand】C++设计模式笔记1_介绍
课程目标 理解松耦合设计思想掌握面向对象设计原则掌握重构技法改善设计掌握GOF核心设计模式 什么是设计模式 目标:复用,以不变应万变 GOF设计模式 从面向对象谈起 深入理解面向对象 向下:深入理解三大面向对象机制 封装:隐藏…...
MySQL 数据库:原理、应用与发展
摘要:本文深入探讨了 MySQL 数据库相关内容。首先介绍了 MySQL 作为开源关系型数据库管理系统的显著特点,包括易用性、跨平台性、高性能、可扩展性、开源免费以及数据安全性等方面。接着详细阐述了其安装与配置过程,涵盖在不同操作系统上的安…...
7.2图像旋转
实验原理 在OpenCV中,图像旋转也是一种常见的几何变换,它可以用来调整图像的方向。图像旋转通常涉及绕着图像中心点旋转一定角度的操作。与图像平移类似,旋转也可以通过仿射变换来实现,但是旋转需要使用到旋转矩阵来定义旋转的角…...
学学vue-2
1.7 指令修饰符 keyup.enter:监听键盘回车事件,回车触发事件keyup.enter代码 v-model修饰符: v-model.trim:去首尾空格v-model.number:变数字(如果是数字的话,转变为数字) 事件名.…...
什么是 Grafana?
什么是 Grafana? Grafana 是一个功能强大的开源平台,用于创建、查看、查询和分析来自多个来源的数据。通过可视化仪表盘(Dashboard),它能够帮助用户监控实时数据、生成历史报告,甚至进行预测分析。Grafana…...
【Prompt Engineering:思维树 (ToT)、检索增强生成 (RAG)、自动推理并使用工具 (ART)】
思维树 (ToT) 对于需要探索或预判战略的复杂任务来说,传统或简单的提示技巧是不够的。最近,Yao et el. (2023)(opens in a new tab) 提出了思维树(Tree of Thoughts,ToT)框架,该框架基于思维链提示进行了总…...
【习题】应用/元服务上架
判断题 1. 一个完整的发布软件包必须包含一个Profile文件。 A、正确(True) B、错误(False) 2. 编译打包的软件包存放在项目目录build > outputs > default下。 A、正确(True) B、错误(False) 单选题 1. 创建应用时,应用包名需要和在DevEco …...
性能测试的复习3-jmeter的断言、参数化、提取器
一、断言、参数化、提取器 需求: 提取查天气获取城市名请求的响应结果:城市对查天气获取城市名的响应结果进行响应断言和json断言对查天气获取城市名添加用户参数 1、步骤 查看天气获取城市名 json提取器(对响应结果提取、另一个接口请求…...
ORB-SLAM2关键点总结
1.ORB-SLAM2的总体框架是怎样的 ORB-SLAM2一共有三个线程,分别是Tracking、Local Mapping、Loop Closing线程,,其中Tracking负责完成关键点提取,并进行帧间匹配,同时初步选取关键帧;Local Mapping线程主要…...
拱式桥安全结构健康监测解决方案
拱式桥作为一种常见的桥梁结构,其拱形设计不仅美观,还具有较高的承载能力。然而,随着使用年限的增加和环境因素的影响,拱式桥的结构健康和稳定需要持续监测和评估。自动化监测技术的应用,可以提升拱式桥的监测效率和准…...
windows和linux安装mysql5.7.31保姆级教程
一,资源如下,里面有windows和linux版的安装软件,内含Visual C2013中文版windows系统插件 windows资源地址:https://download.csdn.net/download/l1o3v1e4ding/89725150 linux(centos)资源地址:…...
如何使用 PowerShell 脚本来自动化 Windows 开发流程的教程(包括理论介绍和实践示例)
PowerShell 是一种强大的任务自动化和配置管理框架,它为系统管理员和开发人员提供了管理 Windows 操作系统和应用程序的能力。下面是一个关于如何使用 PowerShell 脚本来自动化 Windows 开发流程的教程,包括理论介绍和实践示例。 第一部分:理…...
CTFHub技能树-信息泄露-HG泄漏
目录 漏洞产生原因 解题过程 当开发人员使用 Mercurial 进行版本控制,对站点自动部署。如果配置不当,可能会将.hg 文件夹直接部署到线上环境。这就引起了 hg 泄露漏洞。 漏洞产生原因 Mercurial(hg)是一种分布式版本控制系统,它与Git类似也可以用于管…...
OpenCV结构分析与形状描述符(18)比较两个轮廓相似度的函数matchShapes()的使用
操作系统:ubuntu22.04 OpenCV版本:OpenCV4.9 IDE:Visual Studio Code 编程语言:C11 算法描述 比较两个形状。 该函数用于比较两个形状。所有三个实现的方法都使用了 Hu 不变矩(参见 HuMoments) 函数原型 double c…...
CCS811二氧化碳传感器详解(STM32)
目录 一、介绍 二、传感器原理 1.原理图 2.引脚描述 3.工作原理介绍 三、程序设计 main.c文件 ccs811.h文件 ccs811.c文件 四、实验效果 五、资料获取 项目分享 一、介绍 CCS811模块是一种气体传感器,可以测量环境中TVOC(总挥发性有机物质)浓度和eCO2…...
Navicat 17 新特性 | 聚焦 MongoDB
随着 Navicat 17 的盛大发布,其一系列创新特性赢得了广大用户的热烈反响。它不仅在模型设计上实现了突破性优化,提升了查询与配置的效率,还大幅优化了用户界面的交互体验,原生支持国产平台与操作系统,同时增强 BI 能力…...
openssl的使用
1、编译 Github下载:https://github.com/openssl/openssl 官网下载:https://openssl-library.org/source/index.html 官网历史版本:https://www.openssl.org/source/old/ 1.1 Windows下编译 我的文章:OPC UA使用 Openssl库编译…...
为什么顶尖教研团队已弃用传统搜索引擎?Perplexity教育搜索的3个颠覆性能力,今天必须掌握
更多请点击: https://intelliparadigm.com 第一章:为什么顶尖教研团队已弃用传统搜索引擎? 当清华大学智能教育实验室在2023年构建AI辅助备课系统时,其技术白皮书明确指出:“Google Scholar 和通用搜索引擎的召回率在…...
Linux内核中断处理机制深度解析:中断嵌套与异常打断原理
1. 中断处理中的“打断”迷思:一个内核老兵的深度剖析在Linux内核开发与调试的深水区里,中断处理机制就像一把双刃剑,它赋予了系统响应外部事件的实时性,却也带来了复杂性与不确定性。其中,一个经典且常被误解的问题就…...
完整指南:如何通过JiYuTrainer高效解除极域电子教室限制
完整指南:如何通过JiYuTrainer高效解除极域电子教室限制 【免费下载链接】JiYuTrainer 极域电子教室防控制软件, StudenMain.exe 破解 项目地址: https://gitcode.com/gh_mirrors/ji/JiYuTrainer JiYuTrainer是一款专业级的极域电子教室破解工具,…...
CodeBlocks 20.03 安装与汉化保姆级教程(附中文包下载与常见问题解决)
CodeBlocks 20.03 安装与汉化全流程实战指南 对于刚接触C/C开发的初学者来说,选择一款合适的集成开发环境(IDE)是迈入编程世界的第一步。CodeBlocks以其轻量级、跨平台和开源免费的特性,成为众多教育机构和自学者的首选。本文将带你从零开始,…...
终极Python GUI设计器:Pygubu Designer完全指南
终极Python GUI设计器:Pygubu Designer完全指南 【免费下载链接】pygubu-designer A simple GUI designer for the python tkinter module 项目地址: https://gitcode.com/gh_mirrors/py/pygubu-designer 还在为Python GUI开发而烦恼吗?厌倦了手写…...
智能字幕革命:Open-Lyrics如何用AI重新定义音频内容处理
智能字幕革命:Open-Lyrics如何用AI重新定义音频内容处理 【免费下载链接】openlrc Transcribe and translate voice into LRC file using Whisper and LLMs (GPT, Claude, et,al). 使用whisper和LLM(GPT,Claude等)来转录、翻译你的音频为字幕文件。 项…...
Sun-to-Spotify 技术架构深度剖析:AI 播客生成、CLI 交互与 Spotify 自动化发布全链路实现
摘要 Sun-to-Spotify 是一款基于 Claude Code Skill 生态构建的开源 AI 音频工程工具,核心实现自然语言指令→智能内容生成→多角色对话脚本创作→TTS 音频合成→混音处理→Spotify 平台自动发布的全流程自动化闭环。项目深度整合命令行工具(sun-cli&am…...
FPGA验证核心:Vivado中功能与代码覆盖率的实战指南
1. 项目概述:为什么验证是FPGA开发的重中之重? 如果你刚接触FPGA开发,可能会觉得写代码(HDL)是最核心、最花时间的部分。但等你真正上手几个项目,尤其是那些需要流片或者部署到关键系统的项目后,…...
铸件去毛刺,伯朗特机器人带气动打磨头,恒力去除浇口残余
在铸造行业,无论是金属还是非金属铸件,脱模后都会不可避免地产生飞边、毛刺及浇口残余。这些瑕疵不仅影响产品外观,更可能妨碍后续装配,甚至在部件受力时成为应力集中点,影响产品使用寿命与安全性。传统的人工去毛刺作…...
告别手动调试!用西门子STEP7组态软件,5分钟搞定步进电机多段速与正反转控制逻辑
西门子STEP7高效编程:5步构建步进电机智能控制系统 在工业自动化现场,调试步进电机控制逻辑往往是耗时费力的工作——传统方法需要反复修改硬件接线和梯形图程序,每次速度切换或方向调整都可能引发意外停机。而西门子STEP7组态软件提供的结构…...
