数据结构与算法(五)树和二叉树

树和二叉树-第6章-《数据结构题集》习题解析-严蔚敏吴伟民版 习题集解析部分 第6章 树和二叉树 ——《数据结构题集》-严蔚敏.吴伟民版        源码使用说明  链接☛☛☛ 《数据结构-C语言版》(严蔚敏,吴伟民版)课本源码+习题集解析使用说明        课本源码合辑  链接☛☛☛ 《数据结构》课本源码合辑        习题集全解析  链接☛☛☛ 《数据结构题集》习题解析合辑         相关测试数据下载  链接☛ 数据包  ... 阅读详情

一、树的定义及相关术语
  树(Tree)是n(n>=0)个结点的有限集。n=0时称为空树。在任意一颗非空树当中:有且仅有一个特定的称为根(Root)的结点;当n>1时,其余结点可分为m(m>0)个互不相交的有限集T1、T2、……、Tm,其中每一个集合本身又是一颗树,并且称为根的子树(SubTree)。
  对于树的定义还需要需要强调的是:n>0时根结点是唯一的,不可能存在多个根结点,不要和现实生活中的大树混合在一起,现实生活中的树有很多的根须,那是真实的树,数据结构中的树只能有一个根结点;m>0时,子树的个数没有限制,但是它们一定是互不相交的。
  在这里插入图片描述
  在这里插入图片描述
树的结点分类:
  树的结点包含一个数据元素及若干指向其子树的分支。结点拥有的子树数称为结点的度(Degree)。度为0的结点称为叶结点(Leaf)或终端结点;度不为0的结点称为非终端结点或分支结点。除根结点之外,分支结点也称为内部结点。树的度是树内各结点的度的最大值。结点的层次(Level)从根开始定义起,根为第一层,根的孩子为第二层。若某结点在第n层,则其子树的根就在第n+1层;其双亲在同一层的结点互为堂兄弟。树中结点的最大层次称为树的深度(Depth)或高度,当前树的深度为4。如果将树中结点的各子树看成从左至右是有次序的,不能互换的,则称该树为有序树,否则称为无序树。
  在这里插入图片描述
  在这里插入图片描述
  在这里插入图片描述
树的结点间的关系:
  结点的子树的根称为该结点的孩子(Child),相应地,该结点称为孩子的双亲(Parent)。对于结点来说其父母同体,唯一的一个,所以只能把它称为双亲了。同一个双亲的孩子之间互称兄弟(Sibling)。结点的祖先是从根到该结点所经分支上的所有结点。在图中,对于H来说,D、B、A都是它的祖先,反之,以某结点为根的子树中的任一结点都称为该结点的子孙,B的子孙有D、G、H、I。
  在这里插入图片描述
二、树的存储结构
  双亲表示法:我们假设以一组连续空间存储树的结点,同时在每个结点中,附设一个指示器指示其双亲结点在数组中的位置;也就是说,每个结点除了知道自己是谁以外,还知道它的双亲在哪里;其中data是数据域,存储结点的数据信息;而parent是指针域,存储该结点的双亲在数组中的下标。
  在这里插入图片描述
  孩子表示法:具体办法是,把每个结点的孩子结点排列起来,以单链表作为存储结构,则n个结点有n个孩子链表,如果是叶子结点则此单链表为空。然后n个头指针又组成一个线性表,采用顺序存储结构,存放一个一维数组中。为此,设计两种结点结构,一个是孩子链表的孩子结点,其中child是数据域,用来存储某个结点在表头数组中的下标,next是指针域,用来存储指向某结点的下一个孩子结点的指针;另一个是表头数组的表头结点,其中data是数据域,存储某结点的数据信息,firstchild是头指针域,存储该结点的孩子链表的头指针。
  在这里插入图片描述
  孩子兄弟表示法:任意一颗树,它的结点的第一个孩子如果存在就是唯一的,它的右兄弟如果存在也是唯一的;因此,我们设置两个指针,分别指向该结点的第一个孩子和此结点的右兄弟;其中data是数据域,firstchild为指针域,存储该结点的第一个孩子结点的存储地址,rightsib是指针域,存储该结点的右兄弟结点的存储地址。
  在这里插入图片描述

三、二叉树定义与特点
  二叉树(Binary Tree)是n(n>=0)个结点的有限集合,该集合或者为空集(称为空二叉树),或者由一个根结点和两颗互不相交的、分别称为根结点的左子树和右子树的二叉树组成。
  二叉树的特点有:
    1)每个节点最多有两棵子树,所以二叉树中不存在度大于2的结点,注意不是只有两颗子
     树,而是最多有,没有子树或者有一棵子树都是可以的;
    2)左子树和右子树是有顺序的,次序不能任意颠倒;
    3)即使树中某结点只有一棵子树,也要区分它是左子树还是右子树;
  
  在这里插入图片描述
  
  二叉树具有五种基本形态:
    1)空二叉树;
    2)只有一个根结点;
    3)根结点只有左子树
    4)根结点只有右子树;
    5)根结点既有左子树又有右子树;
    在这里插入图片描述

四、特殊的二叉树
  斜树:顾名思义,斜树一定是要斜的,但是往哪里斜还是有讲究的;所有的结点都只有左子树的二叉树叫左斜树;所有结点都是只有右子树的二叉树叫右斜树,这两者统称为斜树;斜树有很明显的特点,就是每一层都只有一个结点,结点的个数与二叉树的深度相同。
  在这里插入图片描述
  满二叉树:在一棵二叉树中,如果所有分支结点都存在左子树和右子树,并且所有叶子都在同一层上,这样的二叉树就称为满二叉树,因为单是每个结点都存在左右子树,不能算是满二叉树,还必须要所有的叶子都在同一层上,这样就做到了整棵树的平衡;
  满二叉树的特点:
    1)叶子只能出现在最下一层,出现在其他层就不可能达成平衡;
    2)非叶子结点的度一定是2,否则就是“去胳膊少腿”了;
    3)在同样深度的二叉树中,满二叉树的结点个数最多,叶子数最多;
    在这里插入图片描述
  完全二叉树:对一棵具有n个结点的二叉树按层序进行编号,如果编号为i(i<=i<=n)的结点与同样深度的满二叉树中编号为i的结点在二叉树中位置完全相同,则这棵二叉树称为完全二叉树;
  完全二叉树的特点:
    1)叶子结点只能出现在最下两层;
    2)最下层的叶子一定集中在左部连续位置;
    3)倒数第二层,若有叶子结点,一定都在右部连续位置;
    4)如果结点度为1,则该结点只有左子树,即不存在只有右子树的情况;
    5)同样结点数的二叉树,完全二叉树的深度最小;
   在这里插入图片描述

五、二叉树的存储结构
  二叉树的顺序存储结构:二叉树的顺序存储结构就是用一堆数组存储二叉树中的结点,并且结点的存储位置,也就是数组的下标要能体现结点之间的逻辑关系,比如双亲与孩子关系,左右兄弟的关系等。
  在这里插入图片描述
  二叉链表:二叉树的顺序存储结构虽然简单,但是适用性并不强,我们就要考虑链式存储结构,二叉树的每个结点最多有两个孩子,所以为它设计了一个数据域和两个指针域是比较自然的想法,我们称这样的链表叫做二叉链表;其中data是数据域,lchild和rchild都是指针域,分别存放指向左孩子和右孩子的指针。
  在这里插入图片描述

六、二叉树的遍历
  二叉树的遍历(traversing binary tree)是指从根结点出发,按照某种次序依次访问二叉树中的所有结点,使得每个结点被访问一次且仅被访问一次;
  前序遍历:规则是若二叉树为空,则空操作返回,否则先访问根结点,然后前序遍历左子树,再前序遍历右子树;
  中序遍历:规则是若树为空,则空操作返回,否则从根结点开始(注意并不是先访问根结点),中序遍历根结点的左子树,然后是访问根结点,最后中序遍历右子树;
  后序遍历:规则是若树为空,则空操作返回,否则从左到右先叶子后结点的方式遍历访问左右子树,最后访问根结点;

  层序遍历:规则是若树为空,则空操作返回,否则从树的第一层,也就是根结点开始访问,从上而下逐层遍历,在同一层中,按照从左到右的顺序对结点逐个访问;
  在这里插入图片描述

《数据结构》实验五:树和二叉树 实验(实验报告) 一.实验目的      巩固树和二叉树的相关知识,特别是二叉树的相关内容。学会运用灵活应用。 1.回树和二叉树的逻辑结构和存储方法,清楚掌握树和二叉树的遍历操作。 2.学习树的相关知识来解决实际问题。 3.进一步巩固程序调试方法。 4.进一步巩固模板程序设计。 二.实验时间    准备时间为第10周到第12前半周,具体集中实验时间为12周周四。2个学时。 阅读详情

相关推荐

数据结构与算法——从零开始学习(五)树和二叉树

系列文章 第一章:基础知识 第二章:线性表 第三章:栈和队列  第四章:字符串和数组 第五章:树和二叉树 第六章:图   目录 第五章 :树和二叉树 第一节:树的定义及相关术语   1.1 定义 1.2 特点 1.3 形式化 1.4 相关术语 1.5 树的基本操作 第二节:二叉树 2.1 基本概念 2.2 存储结构 2.3 二叉树基本操作 2.4 二叉树的遍...

csdn_aiyang的博客 1万+

【数据结构与算法】树介绍及树的遍历(包含LeetCode的三种遍历方式例题)

01、目录 文章目录01、目录02、前言03、树的简介04、树的遍历方式4.1、 前序遍历4.2、 中序遍历4.3、 后续遍历05、三种遍历方式的Code题(来自LeetCode)5.1、 前序遍历(例题)5.2、 中序遍历(例题)5.3、 后续遍历(例题)06、层序遍历(了解内容)6.1、 层序遍历(了解例题)07、小结 02、前言 有一说一,对于数据结构和算法,我从学编程以来,一只都是抱着一份敬畏或者说是畏惧的心情。 因为我实在没有把握学好他,想必很多人都跟我一样,曾经被数据结构与算法的外表吓住,不敢轻

Cain Xcy的博客 2601

掌握基础:树和二叉树的数据结构与算法

本文还有配套的精品资源,点击获取 简介:本节课程旨在深入解析数据结构与算法中的关键组成部分——树和二叉树。数据结构是组织数据和提高程序效率的核心,而树与二叉树以其独特的层次结构和效率,对于复杂数据的组织和算法优化至关重要。课程内容涵盖了树和二叉树的基本概念、特性以及特殊的二叉树类型,如满二叉树、完全二叉树和平衡二叉树。通过这些基础知识的学习,学员将能够应用树和二叉树解决实际...

weixin_42502040的博客 1086

创建二叉树及二叉树三种遍历(下)

准备工作一览 有了必要的工具后和框架后,需要仔细考虑二叉树创建的过程,将其转化为代码,写入修改好的框架中 1- 分析创建二叉树的具体过程 下面的部分参考代码,栈操作重复步骤就能得到先根序的二叉树 2- 由字符串创建先根序二叉树 bTree.h文件: #ifndef _MEC_BINATRY_TREE_H_ #define _MEC_BINATRY_TREE_H_ typedef struct B_TREE { int data; struct B_TREE *left; struct B_TRE

weixin_43541094的博客 358

YOLOv8实战:用Labelme标注自定义数据集并训练分割模型(附完整代码)

本文详细介绍了使用Labelme标注自定义数据集并训练YOLOv8实例分割模型的完整流程。从环境搭建、数据标注与格式转换,到模型训练、调优、验证及部署,提供了实战代码和调优建议。文章还探讨了如何结合追踪目标技术,实现视频流中的实例分割与目标追踪,为计算机视觉应用提供了一套可复制的解决方案。

552

如何将rvt(BIM)转换为点云格式

1、为什么将BIM转换为点云格式? 如何使设计BIM与真实场景进行配准,分析在建、未建、已建构建的情况,真实场景是通过点云生产的,和点云配准需要相同的格式。 2、如何转换? 实用工具revit,转换过程如下图,这样就可以转换成三角网格形式。 3、FBX还需要进行一次转换,即转换成点云常用的类型,如bin\ply\pcd等格式。 需要软件cloudcompare.exe,软件下载地址百度云 链接:https://pan.baidu.com/s/1pflcKNc04loBnS1yKR39hw 提取码:obaf

self_Name_的博客 4491

树(Tree)

树(tree)是n(n>=0)个结点的有限集。n=0时称为空树。在任意一棵非空树中:(1)有且仅有一个特定的称为根(Root)的结点;(2)当 n>1 时,其与结点可分为m( m>0 )个互不相交的有限集,其中每个集合本身又是一棵树,并且称为根的子树(SubTree)。充分利用顺序存储和链式存储结构特点,完全可以实现对树的存储结构的表示。介绍三种不同的表示法:双亲表示法、孩子表示法、孩子兄弟表示法。

蜗牛先生的博客 1255

ISP-全局色调映射(GTM)算法简单实现

色调映射算法,色彩空间转换LAB

notgoodenouf的博客 2241

【数据结构与算法:五、树和二叉树】

二叉树(Binary Tree)是一种特殊的树结构,每个节点最多有两个子节点,分别为左子节点和右子节点。每个节点最多有两个子节点,分别称为左子节点和右子节点。二叉树是一种递归结构,每个子树也都是一棵二叉树。ADT 树 {数据对象:树是一个节点的集合,每个节点存储数据及其层次关系。操作:Insert(v): 插入节点 v;Delete(v): 删除节点 v;Find(v): 查找节点 v;Traverse(): 遍历树的所有节点;GetHeight(): 获取树的高度。

计算机领域博客,与时俱进的思想与技术。 1170

Qt图形视图框架实战:QGraphicsScene、QGraphicsView与QGraphicsItem的深度应用

本文深入解析Qt图形视图框架的核心组件QGraphicsScene、QGraphicsView与QGraphicsItem的实战应用。通过“舞台、镜头与演员”的比喻,清晰阐述了三者的协作关系,并详细介绍了场景管理、多视图同步、交互增强、自定义图形项绘制与性能优化等高级技巧,帮助开发者高效构建复杂的交互式图形界面。

weixin_29251337的博客 263

30天入门 SAP BTP 开发系列之十八:保姆级教程 - 如何部署 SAP UI5 到 SAP BTP Cloud Foundry 环境

本文摘要: 本文详细介绍了如何将SAP UI5应用部署到Cloud Foundry环境。首先需完成前17篇教程学习,创建SAP BTP子账户并启用Cloud Foundry环境。在SAP Business Application Studio中创建Fiori开发空间,导入GitHub上的UI5项目代码。通过npm run build命令打包成mtar文件后,使用cf deploy命令部署到Cloud Foundry。部署成功后,可在BTP控制台查看应用或通过命令行获取访问URL。整个过程涵盖了环境准备、代码

2007 年 ~ 2025 年,深耕 SAP 技术 18 年 1020

数据结构与算法基础(五)树和二叉树

数据结构与算法基础(五)树和二叉树 文章目录数据结构与算法基础(五)树和二叉树一、树和二叉树的定义1.1树型结构1.2 树的定义1.3 树的基本术语1.4 二叉树的定义1.5 案例引入1.5.1 数据压缩问题1.5.2 利用二叉树求解表达式的值二、树和二叉树的抽象数据类型定义三、二叉树的性质3.1 二叉树的性质3.1 两种特殊形式的二叉树满二叉树完全二叉树四、二叉树的存储结构4.1 二叉树的顺序存储4.2 二叉树的链式存储结构(二叉链表)五、遍历二叉链表5.1 遍历的定义、目的、用途5.2 遍历方法

(∪.∪ )...zzz的博客 456

倍福--手动加入第三方伺服的配置

客户在没有硬件情况下,希望手动配置硬件,添加第三方驱动器,本文介绍其操作流程 目 录 软硬件版本 3 1.1. 倍福Beckhoff 3 1.1.1. 控制器硬件 3 1.1.2. 控制软件 3 操作步骤 3 2.1. 添加电机XML文件 3 2.2. 创建EtherCAT 3 2.3. 添加新建项 3 2.4. 选择型号 4 2.5. 关联NC轴 5 软硬件版本 1.1. 倍福Beckhoff 1.1.1. 控制器硬件 TwinCAT控制制器,PC或者EPC,包括: 嵌入式控制器:CX5020-

weixin_41883890的博客 5329

数据结构与算法(C语言 严蔚敏)五-树和二叉树

每个结点(除根结点)都有且仅有一个直接前趋,所有结点有且仅有零个或多个直接后继。根结点没有前驱,而除根结点外的所有结点有且仅有一个前驱。所有结点看可以有零个或多个后继。n 个结点的树有 n-1 条边。一般定义:二叉树是n(n>=0)个结点的有限集合,由一个根结点和两棵称为左子树和右子树的互不相交的二叉树构成。满二叉树:二叉树的所有结点都存在左子树和右子树,并且所有叶子结点都在同一层上。完全二叉树:二叉树的每个结点都与满二叉树中结点的编号对应,且深度为k的完全二叉树在k-1层上一定是满二叉树。

Jaye 820

YOLOv13添加WDBB模块,map提升5.34!!,召回率提升6.55,准确率提升3.23

本文提出了一种基于YOLOv13改进的目标检测模型,通过引入WDBB模块显著提升了检测性能。实验结果表明,添加WDBB模块后,mAP提升11.34,召回率提升14.55,准确率提升3.23。文章详细介绍了模型移植方法,包括创建新的yaml配置文件、修改tasks.py和__init__.py文件,以及实现rep_block.py中的核心转换函数。改进后的模型通过深度卷积、通道注意力等模块优化了特征提取能力,同时保持了轻量化的特点。该工作为YOLO系列模型的性能提升提供了新的思路和技术实现。

FJN110的博客 2624

大中型超市收银系统(可直接运行)

光步前台收银系统系统功能:商品销售、商品退货、挂单、收银员权限、会员销售、单品取消、整单取消、商品查询、脱机销售、脱机数据上传,基本资料下载,开钱箱、小票打印、收款结算,支持多币种付款方式(现金、储值卡、礼券、微信等),支持多种促销。运行环境:.net 4.0登陆信息用户名:1001 密码:123456内置商品信息,商品编码可输入00001000 - 00010000,测试效果相关功能键F5 结算 F9挂单 F11商品查询 F8退货 Insert单品取消 Del整单取消 F12开钱箱F2 会员 Ctrl+Z退出系统 Home 锁屏 相关源码待公开

补 实验五:树和二叉树实验

其实实验课时已做好,一直忘记发 《数据结构》实验五:   树和二叉树实验 一..实验目的      巩固树和二叉树的相关知识,特别是二叉树的相关内容。学会运用灵活应用。 1.回树和二叉树的逻辑结构和存储方法,清楚掌握树和二叉树的遍历操作。 2.学习树的相关知识来解决实际问题。 3.进一步巩固程序调试方法。 4.进一步巩固模板程序设计。 二

gsy147的专栏 635

VC中sqlite的使用

在VC中对sqlite的使用,实现数据库大批数据的快速插入,读取数据库中的数据在ListCtrl中显示

《数据结构》实验五: 树和二叉树实验

《数据结构》实验五:   树和二叉树实验 一..实验目的      巩固树和二叉树的相关知识,特别是二叉树的相关内容。学会运用灵活应用。 1.回树和二叉树的逻辑结构和存储方法,清楚掌握树和二叉树的遍历操作。 2.学习树的相关知识来解决实际问题。 3.进一步巩固程序调试方法。 4.进一步巩固模板程序设计。 二.实验时间    准备时间为第10周到第12

beibeiyuan123的专栏 1094

visio安装包

Microsoft Office Visio 是一款专业的制图软件。利用经过更新的形状、协作工具和数据链接图表,创建专业级图表以简化复杂的信息。

文档:亲测可用解决vnc灰屏,黑屏,鼠标大黑叉情况

主要解决vnc-viewer灰屏,黑屏,鼠标大黑叉等现象,详细见文档。

数据结构与算法实验5——树和二叉树

7-1 还原二叉树给定一棵二叉树的前序遍历序列和中序遍历序列,要求计算该二叉树的高度。

代码欢乐豆 1572

树和二叉树 (C语言)《数据结构与算法》

目录 序言 1.树概念及结构 1.1树的概念 1.2 树的相关概念 1.3 树的表示 1.4 树在实际中的运用(表示文件系统的目录树结构) 2.二叉树概念及结构 2.1概念 2.2现实中的二叉树 2.3数据结构中的二叉树 2.4特殊的二叉树 2.5 二叉树的存储结构 2.6二叉树的性质 2.7二叉树的存储结构 2.7.1顺序存储 2.7.2链式存储 3.二叉树的顺序结构及实现 3.1 二叉树的顺序结构 4.二叉树链式结构的实现 ...

原来45的博客 8719

【数据结构与算法】树和二叉树

本篇文章将讲到树的基本概念,二叉树的基本概念,二叉树的递归遍历,二叉树的编程,二叉树的非递归遍历。

2301_80035097的博客 1018

数据结构与算法(七)树和二叉树

本文主要包括以下内容: 1, 树的基本概念 2,二叉树 1, 二叉树的基本概念 2,二叉树的分类 1,完全二叉树(Complete Binary Tree) 2,完美/满二叉树(Perfect Binary Tree) 3,完满二叉树(Full Binary Tree) ...

Chiclaim 2万+

数据结构的树和二叉树

树和二叉树是计算机科学中常用的数据结构,它们在数据存储、搜索、排序等多个领域都有着广泛的应用。从简单的二叉树出发,我们可以逐步理解更复杂的树结构,如红黑树、AVL树等。二叉树是一种每个节点最多有两个子节点的树结构,通常子节点被称为“左子节点”和“右子节点”。这种结构使得二叉树在编程中非常易于实现和操作。例如,我们可以使用数组或链表来存储二叉树,并通过递归算法来实现遍历、查找和插入等操作。然而,二叉树并不是唯一的树结构。在实际应用中,我们可能需要处理更复杂的树形结构,如多叉树和森林等。

qq_74013365的博客 1345
上一篇: 数据结构与算法(四)字符串
下一篇: 数据结构与算法(六)图
Micky_Yang
博客等级 码龄8年 58粉丝 143原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值