树的学习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,一经查实,立即删除!

相关文章

【Docker】Docker学习② - Docker安装及基础命令介绍

【Docker】Docker学习② - Docker安装及基础命令介绍 一、Docker简介二、Docker安装及基础命令介绍1. Docker安装验证2. Docker存储引擎3 Docker服务进程4. Docker镜像加速配置 三、Docker镜像管理四、Docker镜像与制作五、Docker数据管理六、网络部分七、Docker仓库之单机Dokc…

kafka乱序消费可能的原因和解决方案

Kafka乱序消费可能的原因有以下几个&#xff1a; 分区顺序&#xff1a;Kafka中的消息按照分区进行存储和分发&#xff0c;每个分区内的消息是有序的&#xff0c;但不同分区之间的消息顺序是无法保证的。如果消费者在多个分区上进行并行消费&#xff0c;并且不处理消息的顺序&am…

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

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

javaweb总览

javaweb需要学习哪些技术 前端web开发&#xff1a; 技术描述HTML用于构建网站的基础结构的css用于美化页面的&#xff0c;作用和化妆或者整容作用一样JavaScript实现网页和用户的交互Vue主要用于将数据填充到html页面上的Element主要提供了一些非常美观的组件Nginx一款web服务…

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; 可以通过软件来控制…

我的2023年总结:旅行见天地,读书明事理,工作合行知

我的2023年总结 呵,时间过得真快啊! 有多快呢? 像烟花,一瞬间。 一瞬间 就在一瞬间 一场梦 梦了一千年 一转眼 只是一转眼 梦已醒 却过了一千年这是写年总结以来的第四年, 2023年往事回首三个字可概括:恍,荒,慌。 文章目录 我的2023年总结1、往年总结2、旅行如书2.1、…

数据库查询练习

数据准备 #建学生信息表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新建功能包在…

系统架构设计师教程(十四)云原生架构设计理论与实践

云原生架构设计理论与实践 14.1 云原生架构产生背景14.2 云原生架构内涵14.2.1 云原生架构定义14.2.2 云原生架构原则14.2.3 主要架构模式14.2.4 典型的云原生架构反模式14.3 云原生架构相关技术14.3.1 容器技术14.3.2 云原生微服务14.3.3 无服务器技术14.3.4 服务网格14.4 云原…

【Docker】Dokcer学习① - 简介

【Docker】Docker学习① - 简介 一、Docker简介1. Docker是什么2. Docker组成3. Docker对比虚拟机4. Linux Namespace技术5. Linux control groups6. 容器管理工具 二、Docker安装及基础命令介绍三、Docker镜像管理四、Docker镜像与制作五、Docker数据管理六、网络部分七、Dock…

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

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

NumPy必知必会50例 | 2. 数组索引和切片:探索 NumPy 数组的秘密

文章目录 2. 数组索引和切片&#xff1a;探索 NumPy 数组的秘密数组索引&#xff1a;抓住您所需的元素一维数组索引多维数组索引 数组切片&#xff1a;选择您想要的一部分一维数组切片多维数组切片 切片的高级用法下一步 2. 数组索引和切片&#xff1a;探索 NumPy 数组的秘密 …

鸿蒙开发案例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;如无人机、机械臂、云台、仿生机器人等等。 需要什么基础&…

记录 | 修改.gitignore文件,如何重新生效

git rm -r --cached . # 清除缓存 git add . # 追踪文件 git commit -m "更新.gitignore" # 注释提交 git push origin master # 推送远程 git rm -r --cached解决已提交…

Protues使用

提示&#xff1a;文章写完后&#xff0c;目录可以自动生成&#xff0c;如何生成可参考右边的帮助文档 文章目录 前言一、pandas是什么&#xff1f;二、使用步骤 1.引入库2.读入数据总结 前言 提示&#xff1a;这里可以添加本文要记录的大概内容&#xff1a; 例如&#xff1a;…

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

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

springboot项目启动时如何排除一个bean?

使用springboot开发项目&#xff0c;我们有时候会排除一些项目里面用不到的bean&#xff0c;不然的话项目启动会报错&#xff0c;这种情况通常是发生在什么场景里呢&#xff0c;以及如何解决呢&#xff1f;今天咱们就聊一聊。 springboot默认封装了很多的组件&#xff0c;并且…