【落羽的落羽 数据结构篇】树、二叉树

在这里插入图片描述

文章目录

  • 一、树
    • 1. 树的概念和结构
    • 2. 树的相关术语
  • 二、二叉树
    • 1. 概念与结构
    • 2. 满二叉树
    • 3. 完全二叉树
    • 4. 二叉树的性质
    • 5. 二叉树的存储结构

一、树

1. 树的概念和结构

之前我们学习了线性表,今天我们再来接触一种全新的数据结构——树。
树是一种非线性的数据结构,它是有有限个结点组成的一个具有层次关系的结构。把它称为树是因为它看起来就像一棵倒挂的树,根朝上而叶朝下。

现实中的树:
现实中的树

树形结构:
在这里插入图片描述
关于数据结构树:

  • 它有一个根结点,根结点没有前驱结点,如上图的A就是这棵树的根结点。
  • 除根结点外,其余结点被分为有限个互不相交的集合,每一个集合都是一棵子树,每棵子树有且只有一个前驱结点,可以没有后继或多个后继结点。因此,树是递归定义的。
  • 子树不能有交集,否则就不是树形结构。
  • 一棵有n个结点的树有n - 1条边

2. 树的相关术语

  • 父结点/双亲结点:若一个结点有子结点,则这个结点是其子节点的父结点。如上图,A是B、C、D、E的父结点,C是H的父结点。

  • 子结点/孩子结点:若一个结点含有子树,则子树的根结点称为该结点的子结点。如上图,B、C、D、E是A的子结点,K是F的子结点。

  • 结点的度:一个结点有几个孩子,它的度就是多少。如上图,A的度是4,C的度是2,M的度是0。

  • 树的度:一棵树中,所有结点的度中的最大值就是这棵树的度。如上图,这棵树的度是6。

  • 叶子结点/叶节点/终端节点:度为0的结点。如上图,K、G、L、M、N、D、I、O都是叶子结点。

  • 分支结点/非终端结点:度不为0的结点。如上图,A、B、C、E、F、H、J都是分支结点。

  • 兄弟结点:具有相同父结点的结点互称为兄弟结点。如上图,B、C、D、E互称为兄弟结点,I、J互称为兄弟结点。

  • 结点的层次:从根结点开始定义,根结点在第1层,根结点的子结点在第2层,以此类推。如上图,D在第2层、N在第4层。

  • 树的高度/深度:树中结点的最大层次。如上图,这棵树的高度为4。

  • 路径:从一个结点到另一个结点的结序列,结点之间只能通过父子关系连接、如上图,A到L的路径为A-C-H-L,G到O的路径为G-C-A-E-J-O。

  • 结点的子孙:以一个结点为根结点的子树中的所有结点都称为该结点的子孙。如上图,除A外所有结点都是A的子孙,I、J、O都是E的子孙。

  • 结点的祖先:从根结点到一个结点所经分支上的所有结点称之为该节点的祖先。如上图,A是除自己外所有结点的祖先,A、B、F都是K的祖先。

  • 森林:若干棵互不相交的树的集合称为森林。

在这里插入图片描述

二、二叉树

1. 概念与结构

在树形结构中,我们最常用的就是二叉树。二叉树由根结点、左子树、右子树组成,或者为空。
二叉树的特点是:

  • 二叉树的度一定不大于2,也就是二叉树的每一个结点的子结点不多于2个。
  • 二叉树的子树有左右之分,次序不能颠倒。
    在这里插入图片描述

2. 满二叉树

满二叉树是二叉树的特殊情形。一个二叉树如果每一层的结点数都达到最大值,它就是满二叉树。也就是除叶子结点外每一个结点都有两个子结点。不难计算,如果一个满二叉树的高度为k,则它的结点总数是2k -1(等比数列求和)

在这里插入图片描述

3. 完全二叉树

完全二叉树是由满二叉树引出来的。
我们首先要知道二叉树中结点的编号方式:从上到下,从左到右。从第一层开始从左到右从0开始依次编号,第一层编完第二层从左到右编号……直到所有结点编号完
在这里插入图片描述
对于有n个结点的二叉树,若每一个结点都与深度相同的满二叉树的编号从0到n的结点一一位置对应,这个二叉树就是完全二叉树,满二叉树也是完全二叉树。
也可以理解为:完全二叉树的每一层结点个数达到最大,最后一层不一定达到最大,且结点是从左到右依次排列的。
比如,以下这些都是完全二叉树:在这里插入图片描述

4. 二叉树的性质

  • 非空二叉树的第i层上最多有2i-1个结点
  • 深度为h的二叉树的结点数不多于2h-1
  • 具有n个结点的满二叉树的深度为log2(n+1)

5. 二叉树的存储结构

二叉树既可以用顺序结构存储,也可以用链式结构存储,我们之后都要学习。

在这里插入图片描述

本篇完,感谢阅读

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

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

相关文章

数据结构(陈越,何钦铭) 第四讲 树(中)

4.1 二叉搜索树 4.1.1 二叉搜索树及查找 Position Find(ElementTyoe X,BinTree BST){if(!BST){return NULL;}if(X>BST->Data){return Find(X,BST->Right)}else if(X<BST->Data){return Find(X,BST->Left)}else{return BST;} } Position IterFind(ElementTyp…

【原创工具】同文件夹PDF文件合并 By怜渠客

【原创工具】同文件夹PDF文件合并 By怜渠客 原贴&#xff1a;可批量合并多个文件夹内的pdf工具 - 吾爱破解 - 52pojie.cn 他这个存在一些问题&#xff0c;并非是软件内自主实现的PDF合并&#xff0c;而是调用的pdftk这一工具&#xff0c;但楼主并没有提供pdftk&#xff0c;而…

Kafka系列之:记录一次源头数据库刷数据,造成数据丢失的原因

Kafka系列之:记录一次源头数据库刷数据,造成数据丢失的原因 一、背景二、查看topic日志信息三、结论四、解决方法一、背景 源头数据库在很短的时间内刷了大量的数据,部分数据在hdfs丢失了 理论上debezium数据采集不会丢失,就需要排查数据链路某个节点是否有数据丢失。 数据…

llama.cpp 一键运行本地大模型 - Windows

文章目录 llama.cpp 一键运行本地大模型 - Windows嘿&#xff0c;咱来唠唠 llama.cpp 这玩意儿&#xff01;gguf 格式是啥&#xff1f;咱得好好说道说道基座模型咋选&#xff1f;所需物料&#xff0c;咱得准备齐全咯核心命令&#xff0c;得记牢啦运行方式咋选&#xff1f;测试应…

BGP状态和机制

BGP邻居优化 为了增加稳定性,通常建议实验回环口来建立邻居。更新源:建立邻居和邻居所学习到的路由的下一跳。多跳:EBGP邻居建立默认选哟直连,因为TTL=1,如果非直连,必须修改TTL。命令备注peer 2.2.2.2 connect-interface lo1配置更新源peer 2.2.2.2 ebgp-max-hop 2配置T…

Holoens2开发报错记录02_通过主机获取彩色和深度数据流常见错误

01.E1696 E1696 无法打开源文件 “stdio.h” 解决方法&#xff1a; 更新一下SDK 1&#xff09;打开Visual Studio Installer&#xff0c;点击修改 2&#xff09;安装详细信息中自己系统对应的SDK&#xff0c;点击修改即可 02.WinError 10060 方法来源 解决方法&#xff1a…

labview关于计时器的使用

通过使用计时器函数&#xff0c;可以对采集和保存实现很好的控制&#xff0c;因为之前通过等待函数有出现程序卡死的情况&#xff0c;这里用到定时器函数来实现时间控制。 根据用户输入的采集频率&#xff0c;和采集的单位来确定是否上次采集的时间间隔减去这次计时器的时间是…

go语言环境下载与配置(Windows)

下载 Go下载 - Go语言中文网 - Golang中文社区 建议在D盘中创建文件夹安装到 D 盘 &#xff0c;方便进行管理&#xff0c;然后进行傻瓜式安装。 安装 验证安装 go version 安装成功 配置环境变量 winE --> 右击此电脑 --> 选择属性 --> 高级系统设置 --> 点击…

低延迟,高互动:EasyRTC的全场景实时通信解决方案

在数字化时代&#xff0c;实时通信技术已成为连接人与人、人与设备的重要桥梁。无论是在线教育、远程医疗、智能家居&#xff0c;还是企业协作&#xff0c;高效的实时互动体验都是提升效率和满意度的关键。而 EasyRTC&#xff0c;作为领先的实时通信解决方案&#xff0c;凭借其…

车载诊断架构 --- LIN节点路由转发注意事项

我是穿拖鞋的汉子,魔都中坚持长期主义的汽车电子工程师。 老规矩,分享一段喜欢的文字,避免自己成为高知识低文化的工程师: 简单,单纯,喜欢独处,独来独往,不易合同频过着接地气的生活,除了生存温饱问题之外,没有什么过多的欲望,表面看起来很高冷,内心热情,如果你身…

浏览器深度解析:打造极速、安全、个性化的上网新体验

在数字化时代,浏览器作为我们获取信息、娱乐休闲的重要工具,其性能与功能直接影响着我们的上网体验。今天,我将为大家介绍一款备受好评的浏览器——Yandex浏览器,并深入解析其独特功能与优势,帮助大家更好地了解并选择这款上网神器。 一、知名公司背书,开源项目融合 Yan…

vite react 项目打包报错处理

Could not find a declaration file for module lodash 安装 Lodash 类型声明文件 # 使用 npm npm install --save-dev types/lodash# 使用 yarn yarn add -D types/lodash 打包成功

PyTorch-基础(CUDA、Dataset、transforms、卷积神经网络、VGG16)

PyTorch-基础 环境准备 CUDA Toolkit安装&#xff08;核显跳过此步骤&#xff09; CUDA Toolkit是NVIDIA的开发工具&#xff0c;里面提供了各种工具、如编译器、调试器和库 首先通过NVIDIA控制面板查看本机显卡驱动对应的CUDA版本&#xff0c;如何去下载对应版本的Toolkit工…

[实现Rpc] 测试 | rpc部分功能联调 | debug | 理解bind

目录 服务端 客户端 Debug 运行 总结 服务端 调用 on Request 对请求做出回应 on 对...做处理 #include "../../common/net.hpp" #include "../../common/message.hpp" #include "../../common/dispatcher.hpp" #include "../../se…

LeetCode每日精进:622.设计循环队列

题目链接&#xff1a;622.设计循环队列 题目描述&#xff1a; 设计你的循环队列实现。 循环队列是一种线性数据结构&#xff0c;其操作表现基于 FIFO&#xff08;先进先出&#xff09;原则并且队尾被连接在队首之后以形成一个循环。它也被称为“环形缓冲器”。 循环队列的一个…

网络安全学习-常见安全漏洞检测以及修复方法-1

渗*透测试 渗透测试就是模拟攻击者入侵系统&#xff0c;对系统进行一步步渗透&#xff0c;发现系统的脆弱环节和隐藏风险。形成测试报告提供给系统的所有者&#xff0c;所有者根据报告对系统进行加固&#xff0c;提升系统的安全性&#xff0c;防止真正的攻击者入侵。 渗透测试…

鸿蒙开发深入浅出01(基本环境搭建、页面模板与TabBar)

鸿蒙开发深入浅出01&#xff08;基本环境搭建、页面模板与TabBar&#xff09; 1、效果展示2、下载 DevEco Studio3、创建项目4、新建页面模板5、更改应用信息6、新建以下页面7、Index.ets8、真机运行9、图片资源文件 1、效果展示 2、下载 DevEco Studio 访问官网根据自己的版本…

C/C++ | 每日一练 (4)

&#x1f4a2;欢迎来到张胤尘的技术站 &#x1f4a5;技术如江河&#xff0c;汇聚众志成。代码似星辰&#xff0c;照亮行征程。开源精神长&#xff0c;传承永不忘。携手共前行&#xff0c;未来更辉煌&#x1f4a5; 文章目录 C/C | 每日一练 (4)题目参考答案基础容器序列容器std:…

(八)趣学设计模式 之 装饰器模式!

目录 一、 啥是装饰器模式&#xff1f;二、 为什么要用装饰器模式&#xff1f;三、 装饰器模式的实现方式四、 装饰器模式的优缺点五、 装饰器模式的应用场景六、 装饰器模式 vs 代理模式七、 总结 &#x1f31f;我的其他文章也讲解的比较有趣&#x1f601;&#xff0c;如果喜欢…

快节奏生活

在当今快节奏的商务环境中&#xff0c;效率成为了决定企业竞争力的关键因素之一。亿可达软件连接平台&#xff0c;以其独特的功能和优势&#xff0c;为职场人士带来了前所未有的便捷与高效&#xff0c;成为了众多用户心中的“宝藏”工具。 1、亿可达&#xff1a;自动化流程的搭…