【数据结构】初识树

news2024/12/22 11:25:05

目录

一,树的基本概念

1.1树的相关概念

1.2树的表示

二,二叉树的基本概念

2.1特殊的二叉树:

2.2二叉树的性质

2.3二叉树的存储结构

1. 顺序存储          

2.链式存储       


一,树的基本概念

树是一类重要的非线性数据结构,它满足以下条件:

  • 有且只有一个特殊的结点,称为根结点,根节点没有前驱结点。
  • 其余的结点可分为m个互不相交的有限集合T1,T2,...,Tm,其中,每个集合又都是一颗树(子树)。
  • 树是递归定义的。

注意:树形结构中,子树之间不能有交集,否则就不是树形结构。

1.1树的相关概念

节点的度:                      一个节点含有的子树的个数称为该节点的度; 如上图: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)棵互不相交的树的集合称为森林。

1.2树的表示

树有很多表示方法:双亲表示法,孩子表示法,孩子双亲表示法以及孩子兄弟表示法等。

这里以孩子兄弟表示法为例

typedef int DataType;
struct Node
{
    struct Node* FirstChild;    //第一个孩子结点
    struct Node* NextBrother;   //指向下一个兄弟结点
    DataType Data;              //结点中的数据域
};

 

二,二叉树的基本概念

二叉树(Binary Tree)是一个由结点构成的有限集合,这个集合或者为空(空二叉树),或者由一个根结点及两颗互不相交的的左子树和右子树组成。

注意:

  • 二叉树不存在度大于2的结点。
  • 二叉树的子树有左右之分,次序不能颠倒,因此二叉树是有序树。

对于任意的二叉树都是由以下几种情况复合而成的: 

2.1特殊的二叉树:

  1. 满二叉树:每一层的结点都达到最大值,如果一个二叉树的层数为K,而且结点总数是2^k-1,则它是满二叉树。
  2. 完全二叉树:对于深度为K的,有n个结点的二叉树,当且仅当其每一个结点都与深度为k的满二叉树中编号从1至n的结点一一对应时称为完全二叉树,注意:满二叉树是一种特殊的完全二叉树。

2.2二叉树的性质

  • 若规定根结点的层数为1,则一颗非空二叉树的第i层上最多有2^(i - 1)个结点
  • 若规定根结点的层数为1,则深度为h的二叉树的最大结点数2是2^h-1.
  • 对于任何一个二叉树,如果度为0其叶节点个数为n0,度为2的分支结点个数为n2,则有n0=n2+1
  •  若规定根节点的层数为1,具有n个结点的满二叉树的深度,h= log2 (n+1). (ps: log2 是以2 为底,n+1为对数)
  • 对于具有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否则无右孩子

2.3二叉树的存储结构

二叉树一般可以使用两种结构存储,一种顺序结构 ,一种链式结构。

1. 顺序存储
            顺序结构存储就是使用数组来存储,一般使用数组只适合表示完全二叉树,因为不是完全二叉树会有空间的浪费。而现实中使用中只有堆才会使用数组来存储。二叉树顺序存储在物理上是一个数组,在逻辑上是一颗二叉树。

2.链式存储
        二叉树的链式存储结构是指,用链表来表示一棵二叉树,即用链来指示元素的逻辑关系。 通常的方法是 链表中每个结点由三个域组成,数据域和左右指针域,左右指针分别用来给出该结点左孩子和右孩子所 在的链结点的存储地址 。链式结构又分为二叉链和三叉链,当前我们学习中一般都是二叉链,后面红黑树会用到三叉链。

 

typedef int BTDataType;
//二叉链表
struct BinaryTreeNode
{
    struct BinTreeNode* pLeft; //指向当前节点左孩子
    struct BinTreeNode* PR一个话题;//指向当前节点右孩子
    BTDataType data;//当前节点值域
}
//三叉链表
struct BinaryTreeNode
{
    struct BinTreeNode* pParent; //指向当前结点的双亲
    struct BinTreeNode* pLeft;   //指向当前节点左孩子
    struct BinTreeNode* PR一个话题;//指向当前节点右孩子
    BTDataType data;//当前节点值域
};

好了,到这里会有对树有着基本的概念了,下一篇将深入讲解,希望能对大家有帮助!

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

芯探科技--泛自动驾驶激光雷达解决方案

泛自动驾驶应用领域: 无人配送车 无人叉车 服务机器人 无人清扫车 …… 泛自动驾驶激光雷达解决方案介绍 在中低速移动过程中,类似无人配送车、无人叉车、服务型机器人、无人清扫车等具有自动驾驶功能的车辆,其需要对周围的环境进行探测,进而实现…

大数据Flink简介与架构剖析并搭建基础运行环境

文章目录 前言Flink 简介Flink 集群剖析Flink应用场景Flink基础运行环境搭建Docker安装docker-compose文件编写创建并运行容器访问Flink web界面 前言 前面我们分别介绍了大数据计算框架Hadoop与Spark,虽然他们有的有着良好的分布式文件系统和分布式计算引擎&#xff0c;有的有…

算法:分治思想处理快排递归以及快速选择/最小K个数问题

文章目录 算法原理实现思路典型例题颜色分类快速排序优化数组中最大的K个数最小的K个数 总结 算法原理 分治的原理就是分而治之&#xff0c;从原理上讲&#xff0c;就是把一个复杂的问题划分成子问题&#xff0c;再将子问题继续划分&#xff0c;直到可以解决 实现思路 基于分…

nvm 安装nodejs

1. 下载nvm 地址&#xff1a;Releases coreybutler/nvm-windows GitHub 2. 按要求一步步进行 3. 安装完成后配置nvm 的环境变量 找到nvm文件的路径&#xff0c;选中path&#xff0c;点击编辑讲nvm的路径放进去确定保存即可

RK3562 到底性能如何?安兔兔实测

RK3562采用四核A53Mali G52架构&#xff0c;主频2GHz&#xff0c;内置1T NPU算力以及13M ISP&#xff0c;拥有丰富的外围接口。其次在解码方面&#xff0c;支持H.264 1080P60fps、H.265 4K30fps&#xff1b;编码方面支持H.264 1080P60fps&#xff0c;此外还有高质量JPEG编解码。…

无涯教程-Android Intent Standard Actions函数

下表列出了各种重要的Android Intent标准操作。您可以查看Android官方文档以获取完整的操作列表- Sr.NoActivity Action Intent & Description1 ACTION_ALL_APPS 列出设备上所有可用的应用程序。 2 ACTION_ANSWER 处理来电。 3 ACTION_ATTACH_DATA 用于表示应将某些数据…

Python股票交易---均值回归

免责声明&#xff1a;本文提供的信息仅用于教育目的&#xff0c;不应被视为专业投资建议。在做出投资决策时进行自己的研究并谨慎行事非常重要。投资涉及风险&#xff0c;您做出的任何投资决定完全由您自己负责。 在本文中&#xff0c;您将了解什么是均值回归交易算法&#xff…

你的香港公司开始年审了吗?

小青是个SOHO&#xff0c;在19年找A注册的香港公司&#xff0c;一开始是想着有个自己的公司收款或者给客户做合同的时候不需要麻烦供应商&#xff0c;会相对方便一些。公司下来之后&#xff0c;每年年审的费用也就上千块&#xff0c;还不算太高。 一开始做年审&#xff0c;都是…

Rn实现省市区三级联动

省市区三级联动选择是个很频繁的需求&#xff0c;但是查看了市面上很多插件不是太老不维护就是不满足需求&#xff0c;就试着实现一个 这个功能无任何依赖插件 功能略简单&#xff0c;但能实现需求 核心代码也尽力控制在了60行左右 pca-code.json树型数据来源 Administrative-d…

基于RabbitMQ的模拟消息队列之三——硬盘数据管理

文章目录 一、数据库管理1.设计数据库2.添加sqlite依赖3.配置application.properties文件4.创建接口MetaMapper5.创建MetaMapper.xml文件6.数据库操作7.封装数据库操作 二、文件管理1.消息持久化2.消息文件格式3.序列化/反序列化4.创建文件管理类MessageFileManager5.垃圾回收 …

【校招VIP】测试计划之测试分类

考点介绍&#xff1a; 本专题主要介绍了软件测试在不同场景下的划分。并且讲解了基于软件测试的划分衍生出的常见面试题。 测试分类也是校招里面考察的一个重点。 『测试计划之测试分类』相关题目及解析内容可点击文章末尾链接查看&#xff01; 一、考点试题 1.软件测试按开…

【安卓】拿注册码的两种方式

【安卓】拿注册码的两种方式 文章仅用于学习交流&#xff0c;请勿利用文章中的技术对任何计算机系统进行入侵操作。利用此文所提供的信息而造成的直接或间接后果和损失&#xff0c;均由使用者本人负责。首发吾爱&#xff1a;https://www.52pojie.cn/thread-1826802-1-1.html言归…

OBS Studio 30.0 承诺在 Linux 上支持英特尔 QSV,为 DeckLink 提供 HDR 回放功能

导读OBS Studio 30.0 现已推出公开测试版&#xff0c;承诺为这款广受欢迎的免费开源截屏和流媒体应用程序提供多项令人兴奋的新功能&#xff0c;以及大量其他更改和错误修复。 OBS Studio 30.0 承诺在 Linux 上支持英特尔 QSV&#xff08;快速同步视频&#xff09;、WHIP/WebRT…

Makefile介绍与使用

Make简介 工程管理器&#xff0c;顾名思义&#xff0c;是指管理较多的文件 Make工程管理器也就是个“”自动编译管理器”&#xff0c;这里的“自动”是指它能够根据文件时间戳自动发现更新过的文件而减少编译的工作量&#xff0c;同事&#xff0c;它通过读入Makefile文件的内…

问道管理:市场热点有望轮动表现 关注数据要素等主题板块

近期两市指数继续单边下行趋势仍未扭转&#xff0c;短期利好后指数虽有反弹&#xff0c;但上方仍然压力重重&#xff0c;短期或仍然以反复筑底为主。因而&#xff0c;在国内根本面仍未强势复苏前&#xff0c;指数技能面上仍然会有限制&#xff0c;短期反弹修正后或仍有反复&…

RNN循环神经网络

目录 一、卷积核与循环核 二、循环核 1.循环核引入 2.循环核&#xff1a;循环核按时间步展开。 3.循环计算层&#xff1a;向输出方向生长。 4.TF描述循环计算层 三、TF描述循环计算 四、RNN使用案例 1.数据集准备 2.Sequential中RNN 3.存储模型&#xff0c;acc和lose…

MAC M2芯片执行yolov8 + deepsort 实现目标跟踪

MAC M2芯片执行yolov8 deepsort 实现目标跟踪 MAC M2 YoloX bytetrack实现目标跟踪 实验结果 MAC mps显存太小了跑不动 还是得用服务器跑 需要实验室的服务器跑 因为网上花钱跑4天太贵了&#xff01;&#xff01;&#xff01; 步骤过程尝试&#xff1a; 执行mot17 数据集 …

FSPI的PCB设计

FSPI是一种灵活的串行接口控制器&#xff0c;RK3588芯片中有1个FSPI控制器&#xff0c;可用来连接FSPI设备。 RK3588 FSPI 控制器有如下特点&#xff1a; 1&#xff09;支持串行NOR Flash&#xff0c;串行Nand Flash&#xff1b; 2&#xff09;支持SDR模式&#xff1b; 3&am…

Android屏幕显示 android:screenOrientation configChanges 处理配置变更 代码中动态切换横竖屏

显示相关 屏幕朝向 https://developer.android.com/reference/android/content/res/Configuration.html#orientation 具体区别如下&#xff1a; activity.getResources().getConfiguration().orientation获取的是当前设备的实际屏幕方向值&#xff0c;可以动态地根据设备的旋…

【STM32】学习笔记(EXTI)-江科大

EXTI外部中断 中断&#xff1a;在主程序运行过程中&#xff0c;出现了特定的中断触发条件&#xff08;中断源&#xff09;&#xff0c;使得CPU暂停当前正在运行的程序&#xff0c;转而去处理中断程序&#xff0c;处理完成后又返回原来被暂停的位置继续运行 中断优先级&#x…