树的学习day01

树的理解

在这里插入图片描述

树是一种递归形式的调用
树是由于多个结点组成的有限集合T
树中有且仅有一个结点称为
当结点大于1的时候,往往其余的结点为m个互不相交的有限个集合T1,…,Tm,每个互不相交的有限集合本身右是一棵树,称为这个根的子树
空树也是

关于术语

:根结点(没有前驱)
叶子:终端结点(没有后继)
森林:指的是m棵互不相交的树组成的集合(例如:删除R以后形成的A,B,C子树所形成的集合)
有序树:各结点子树从左向右有序,不能交换
无序树:各个结点之间可以互换位置
双亲:上层的那个结点(直接前驱parrrent)
孩子:下层结点的子树(直接后继child)
兄弟:同一个双亲下的同层结点(孩子直接互称兄弟)
堂兄弟:双亲位于同一层的简单(但是并非属于同一个双亲)
祖先:从根到该结点所经历的分支的所有结点
子孙:从该结点的下层子树中的任意结点
结点:树的数据元素
结点的度:结点挂接的子树数目(有几个后继就是几度,亦称为“次数”)----------->结点挂接的孩子有几个,度就是几

树的度:指的是所有结点,其中结点的孩子最多的(结点挂接子树最多的,就是树的度)(Max{各个结点的度})

结点的层次:从根到该结点的层数,根结点算作第一层
终端结点:及最后一层结点,度为0的结点,及叶子结点
分支结点:除了树根以外的结点(内部结点)
树的深度(树的高度):指的是所有结点中的最大的层数(Max{各结点的层次})(那这个不就相当于叶子结点到根结点的距离)

树的广义表示法

对于上图的树的广义表示法为:R(A(D,E),B,C(F(G,H,I)))
用途:
遵照左为尊,兄长如父的原则
在这里插入图片描述

树的逻辑结构

一对多的关系(1:n),有多个直接后继,但是根结点只有一个,并且子树间互不相交。

树的存储结构

树是非线性结构,往往有顺序存储和链式存储等方式
如果将树的信息存储到数据库(首先将每一个结点的信息存入数据库)
往往将树存储到数据库中,首先定义一个结点表(存放每个结点)然后还需要定义一个结点关系表,用来存放结点之间的关系对于节点表以及结点关系表的定义如下:
在这里插入图片描述

二叉树

定义:二叉树是n个结点的有限集合,由一个根节点以及两颗互不相交的分别称为左子树和右子树的二叉树构成
逻辑的结构为:1:2
二叉树的基本特征:每个结点最多只有两棵子树(也就是说明了不存在度大于2的结点
左子树和右子树的顺序不能颠倒(二叉树是一个有序树

二叉树的性质

1)二叉树第二层的结点数最多
答:第二层结点最多为2i-1个结点第i层上至少有1个结点
2)深度为k的二叉树,至多有几个结点?
答:至多有2k-1个结点深度为k的二叉树至少有k个结点
3)对于任何一棵二叉树,若度为2的结点有N2个,则其叶子数必定为?
答:叶子数为N2+1个

满二叉树

一棵树的深度为K,并且有且仅有2k-1个结点的二叉树(特点:每层都充满了结点)

完全二叉树

深度为k的,有n个结点的二叉树,当且仅当其每一个结点斗鱼深度为k的满二叉树一一对应的结点。
第K-1层和满二叉树一样,在最后一层叶子结点尽量靠左
在这里插入图片描述
4)具有N个结点的完全二叉树它的深度为?
答:因为深度为K的完全二叉树它的结点数至多为2k-1,那么K等于⌊log2N⌋+1。其中**⌊⌋ **表示向下取整。
5):对于完全二叉树,若从上至下,从左至右编号,则编号为i的结点,其左孩子的编号必定为2i,其右孩子的编号必定为2i+1,其双亲的编号必为i/2(这里对应取整)

二叉树的存储结构

顺序存储:按照二叉树的结点“自上而下,自左至右”编号,用一组连续的存储单元存储
顺序存储后能否复原成唯一对应的二叉树的形状?
答:若是完全二叉树或者满二叉树则可以做到唯一复原。
而且复原是有规律的——下标为i的双亲,其左孩子的下标必定为2i,其右孩子的下标必定为2i+1

二叉树的链式存储

二叉链表示法

在这里插入图片描述
二叉链表示树:**往往树中的每个结点由三部分组成:数据域和左右指针域(如上图)**其左右指针域分别表示指向结点的左右孩子。
结点的数据类型定义如下:

#include<stdio.h>
#include<stdlib.h>
#pragma region 定义链表
typedef int DataType;
typedef struct Node
{DataType data;//数据域struct Node* next;//指针域Node表示这个链表的名字
}Node;
#pragma endregion
#pragma region 二叉链表示法
typedef struct BiTNode
{DataType data;struct BiTNode *lchild, *rchild;//左右孩子的结点指针
}BiTNode;
typedef  BiTNode *BitTree;//用定义好的BitNode结点,再次定义*BitTree指针
/*数据域data存放结点的数据信息
lchild与rchild分别存储指向左孩子与右孩子的指针
当孩子结点不存在的时候,相应的指针指向NULL
*/
#pragma endregion

在这里插入图片描述

三叉链表示法

使用二叉链表示法虽然可以通过两个指针域便捷的找到孩子结点,但是无法直接便捷的寻找到当前结点的父结点。为了能够顺利的找到结点的父亲结点,可以以二叉链表的结点为基础,在结点中添加一个指向父结点的指针parent,形成一个带父亲结点指针的结点。这种节点构建出的二叉树其每个结点包括的成分为:数据域、左孩子指针域、右孩子指针域、父亲域

#pragma region 三叉链表示法
typedef struct BitNode
{DataType data;struct BitNode* lchild,* rchild;struct BitNode* parent;
}BitNode,*BitTree;
#pragma endregion

在这里插入图片描述
memset是一个初始化函数,作用是将某一块内存中的全部设置为指定的值。

void *memset(void *s, int c, size_t n);
s指向要填充的内存块。
c是要被设置的值。
n是要被设置该值的字符数。
返回类型是一个指向存储区s的指针。

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

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

相关文章

选现货白银投资划不划算?

可以肯定的是选择现货白银投资是划算的&#xff0c;但投资者需要有足够的知识和经验&#xff0c;以及对市场的敏锐观察力。只有这样&#xff0c;投资者才能在现货白银投资中获取收益。在投资市场上&#xff0c;白银作为一种特殊的投资品种&#xff0c;一直以来都备受投资者们的…

JUC-CAS

1. CAS概述 CAS(Compare ans swap/set) 比较并交换&#xff0c;实现并发的一种底层技术。它将预期的值和内存中的值比较&#xff0c;如果相同&#xff0c;就更新内存中的值。如果不匹配&#xff0c;一直重试&#xff08;自旋&#xff09;。Java.util.concurrent.atomic包下的原…

Redis - redis.windows.conf配置文件及RDB和AOF数据持久化方案

Redis - redis.windows.conf配置文件及RDB和AOF数据持久化方案 Redis的高性能是由于其将所有数据都存储在了内存中&#xff0c;为了使Redis在重启之后仍能保证数据不丢失&#xff0c;需要将数据从内存中同步到硬盘中&#xff0c;这一过程就是持久化。 Redis支持两种方式的持久化…

【51单片机】点亮第一个LED灯

目录 点亮第一个LED灯单片机 GPIO 介绍GPIO 概念GPIO 结构 LED简介软件设计点亮D1指示灯LED流水灯 橙色 点亮第一个LED灯 单片机 GPIO 介绍 GPIO 概念 GPIO&#xff08;general purpose intput output&#xff09; 是通用输入输出端口的简称&#xff0c; 可以通过软件来控制…

数据库查询练习

数据准备 #建学生信息表student create table student ( sno varchar(20) not null primary key, sname varchar(20) not null, ssex varchar(20) not null, sbirthday datetime, class varchar(20) ); #建立教师表 create table teacher ( tno varchar(20) not null primary…

仿真机器人-深度学习CV和激光雷达感知(项目2)day04【简单例程】

文章目录 前言简单例程运行小海龟仿真启动节点查看计算图发布 Topic调用 Serviece 用 Python 发布和接收 Topic创建工作空间创建功能包&#xff0c;编译编写 Topic Publisher 节点编写 Topic Subscriber 节点运行节点 自定义消息类型用 Python 注册和调用 Serviece新建功能包在…

分类预测 | Matlab实现LSTM-Attention-Adaboost基于长短期记忆网络融合注意力机制的Adaboost数据分类预测/故障识别

分类预测 | Matlab实现LSTM-Attention-Adaboost基于长短期记忆网络融合注意力机制的Adaboost数据分类预测/故障识别 目录 分类预测 | Matlab实现LSTM-Attention-Adaboost基于长短期记忆网络融合注意力机制的Adaboost数据分类预测/故障识别分类效果基本描述程序设计参考资料 分类…

鸿蒙开发案例002

1、目标需求 界面有增大字体按钮&#xff0c;每次点击增大字体按钮&#xff0c;“Hello ArkTS”都会变大 2、源代码 Entry Component struct Page {textValue: string Hello ArkTSState textSize: number 50myClick():void{this.textSize 4}build() {Row() {Column() {//…

stm32 FOC 电机介绍

今年开始学习foc控制无刷电机&#xff0c;这几天把所学整理一下&#xff0c;记录一下知识内容。 前言: 为什么要学习FOC? 1.电机控制是自动化控制领域重要一环。 2.目前直流无刷电机应用越来越广泛&#xff0c;如无人机、机械臂、云台、仿生机器人等等。 需要什么基础&…

基于Springboot的大学生心理健康管理系统(有报告)。Javaee项目,springboot项目。

演示视频&#xff1a; 基于Springboot的大学生心理健康管理系统&#xff08;有报告&#xff09;。Javaee项目&#xff0c;springboot项目。 项目介绍&#xff1a; 采用M&#xff08;model&#xff09;V&#xff08;view&#xff09;C&#xff08;controller&#xff09;三层体…

MySQL安装及可视化工具SQLyog下载

编程如画&#xff0c;我是panda&#xff01; 最近学习Web开发的时候要用到数据库&#xff0c;一开始下载的ZIP版本的&#xff0c;还得修改配置文件&#xff0c;挺麻烦的&#xff0c;后来发现可以直接使用msi版的安装包疯狂next&#xff0c;所以就出一期教程。 前言 MySQL 是一…

Database__进阶

文章目录 &#x1f60a; 作者&#xff1a;Lion J &#x1f496; 主页&#xff1a; https://blog.csdn.net/weixin_69252724?spm1000.2115.3001.5343 &#x1f389; 主题&#xff1a; 数据库mysql&#xff08;高级部分&#xff09; ⏱️ 创作时间&#xff1a;2024年01月24…

TortoiseSVN源码安装与迁移全攻略

一、前言 随着版本控制系统的普及&#xff0c;越来越多的开发者和团队开始使用SVN&#xff08;Subversion&#xff09;来管理代码。本文将详细介绍TortoiseSVN的源码安装及迁移过程&#xff0c;帮助您轻松掌握这一版本控制工具。 二、TortoiseSVN源码安装 依赖环境安装&…

thymeleaf常用语法大全

有时候需要借鉴别人的代码&#xff0c;发现一个相似的功能点&#xff0c;但是自己的是html页面别人的是jsp页面&#xff0c;那如果不了解thymeleaf的话还是要费点功夫的。 什么是thymeleaf&#xff0c;通俗点&#xff0c;jsp中的${},以及jstl中的if标签什么的都不能用&#xf…

使用 LlamaIndex 部署本地 Mistral-7b 大模型实现 RAG

原理 LlamaIndex的文档链接&#xff1a;Using LLMs - LlamaIndex &#x1f999; 0.9.33 LlamaIndex 的一般使用模式如下&#xff1a; 加载文档&#xff08;手动或通过数据加载器)将文档解析为节点构建索引&#xff08;来自节点或文档)&#xff08;可选&#xff0c;高级&…

2024年 IT 行业就业情况能否回春?很多人说道…

我只能说可以&#xff0c;以前我是看不到的。但是鸿蒙全栈自研让我重新看到希望&#xff01; 2024年1月18日&#xff0c;华为鸿蒙千帆启航发布会。讲到HarmonyOS NEXT作为原生鸿蒙&#xff0c;其系统底座全栈自研&#xff0c;去掉了传统的AOSP 代码&#xff08;“Android 开放…

【latex】在Overleaf的IEEE会议模板中,快速插入参考文献

【LaTeX】在Overleaf的IEEE会议模板中&#xff0c;快速插入参考文献 写在最前面第一步&#xff1a;在文献检索网站导出引用文献的bib文件第二步&#xff1a;编辑overleaf模版方法二&#xff1a;EduBirdie生成参考文献&#xff08;补充&#xff09;使用LaTeX在Overleaf的IEEE会议…

杰卡德距离(Jaccard Distance)

杰卡德距离&#xff08;Jaccard Distance&#xff09;&#xff0c;是用于衡量两个集合差异性的一种指标&#xff0c;它是杰卡德相似系数的补集&#xff0c;可以用来区分集合&#xff08;如知识图谱&#xff09;。 杰卡德相似系数 杰卡德相似系数&#xff08;Jaccard similari…

80.网游逆向分析与插件开发-背包的获取-自动化助手显示物品数据

内容参考于&#xff1a;易道云信息技术研究院VIP课 上一个内容&#xff1a;升级Notice类获得背包基址-CSDN博客 码云地址&#xff08;ui显示角色数据 分支&#xff09;&#xff1a;https://gitee.com/dye_your_fingers/sro_-ex.git 码云版本号&#xff1a;3be017de38c50653b1…

【MATLAB源码-第124期】基于matlab的GFDM系统(64QAM/QPSK调制)在AWGN和PA信道误码率对比。

操作环境&#xff1a; MATLAB 2022a 1、算法描述 广义频分复用&#xff08;GFDM&#xff09;是一种先进的信号调制技术&#xff0c;近年来在无线通信领域获得了广泛的关注。GFDM作为一种多载波调制方案&#xff0c;是对经典的正交频分复用&#xff08;OFDM&#xff09;技术的…