当前位置: 首页 > news >正文

树与二叉树 总复习

一、树的定义

树是一个有n个(n>=0)结点的有限集合。

如果n=0,称为空树;

如果n>0,称为非空树,有且仅有一个特定的称为根Root的结点(无直接前驱)

如果n>1,除了根节点外,其他结点划分为m个互不相交的有限集合(记为T1、T2...TM),每个集合本身又是一棵树,称为根的子树(Sub-tree)。

每个结点肯定有唯一的前驱(除根节点外),但是可能有多个后继。

二、树的术语

结点:包含一个数据元素及若干指向其子树的分支

结点的度:结点拥有的子树个数,也即结点包含的分支个数

叶子结点(终端结点)

度为0的结点 {K,L,F,G,M,I,J}

分支结点()非终端结点

度不为0的结点 {A,B,C,D,E,H}

包含根结点

内部结点:除根之外的分支结点 {B,C,D,E,H}

孩子:结点的子树的根

双亲:孩子的直接前驱

兄弟:同一个双亲的其他孩子

子孙:以某结点为根的树中所有的结点

祖先:从该结点到根结点,经过所有分支结点

树的层次

根结点为第一层,根的孩子为第二层,依次类推。

深度:树中最大的层次

森林:互不相交的树的集合。对于树中每个结点而已,其子树的集合就是森林

二叉树  Binary Tree

每个结点最多只有两棵子树 最多两个孩子

二叉树的子树可以分成左右两个部分 称为左子树和右子树    

 二叉树的性质1

在二叉树的第i层上至多有2i-1个结点  

深度为k的二叉树至多有2^k-1个结点

如果二叉树终端结点数为n0,度为2的结点数为n2,则no=n2+1

证明思路:总结点数n=no+n1+n2

考察分支数B:除了根之外,所有的结点都有且只有一个分支指向它不同度的结点产生不同个数的分支 n=B+1

不同度的结点产生不同个数的分支B=n1+2n2

no=n2+1

五、满二叉树

一个深度为k且有2^^k-1个结点的二叉树

每层上的结点数都是最大数  可以自上而下、自左至右连续编号

完全二叉树  当且仅当每一个结点都与深度相同的满二叉树中编号从1到n的结点一一一对应的二叉树

叶子结点只在最大两层上出现

以任何一个结点为根结点,其左子树深度与右子树深度相等或大于1

具有n个结点的完全二叉树 其深度为log2n取整+1

七、二叉树的存储结构:顺序存储

用一组连续的存储单元依次自上而下,自左至右存储结点

对于一般二叉树,空结点的位置也要按照完全二叉树编号

八、二叉树的链式存储结构

1、二叉链表

采用数据域加上左右孩子的指针

2、二叉链表的定义

二叉链表的一个结点的可以用一个结构体表示,里面包含的成员有一个数据域,两个指针域

struct BiNode    binode: 双节点           node:节点

{

char data;

BiNode  *Ichild,*rchild;

}

3、二叉树的链式存储结构

只能双亲找孩子,孩子难以找到双亲

4、二叉树的链式存储结构

三叉链表

 遍历二茶树

根据访问根结点的次序

DLR

LDR

LRD

先序:

boid PreOrderTraverse(BinTree T)

{

if(T)

{

cout<<T->data;

PreOrderTraverse(T->IChild);

PreOrderTraverse()T->rChild):

先序中序、中序后序

都可以求出二叉树

而先序和后序不可以

因为不具备确定左右子树的能力。

树的存储结构

双亲表示法   找双亲容易找孩子难   

孩子表示法:最大的缺点就是空指针链域太多    有些结点有很多孩子 有些结点的孩子很少:结构不均衡          

n结点的树   度为d      多链表表示法中 空指针必有[(d-1)n+1]

 

 

 

树的路径:

路径:从树的一个结点到另一个结点之间的分支构成了两个结点之间的路径

路径长度:路径上的分支的数目

树的路径长度:从根结点到每个结点之间路径长度的和

如果结点权重不一样,我们可以计算带权路径长度

从结点到根结点之间的路径长度乘以该结点的权重

树的带权路径长度WPL    Weighted  path length

树中所有叶子结点的带权路径长度之和()度为0

相同的叶子结点数,叶子结点也具有相同的权重,但是不同的二叉树会产生不同的WOL

引出概念

树的带权路径长度WPL最小的二叉树被称为最优二叉树

Huffman  哈夫曼树

有什么special的place

权值最大的结点离根最近

权值最小的结点离根最远

 

 

有了编码

怎么解码

要能唯一解码对编码有什么要求

要求前缀编码

即任何一个字符编码都不是其他字符的前缀

Huffman是一种前缀编码

 

相关文章:

树与二叉树 总复习

一、树的定义 树是一个有n个&#xff08;n>0&#xff09;结点的有限集合。 如果n0&#xff0c;称为空树&#xff1b; 如果n>0&#xff0c;称为非空树&#xff0c;有且仅有一个特定的称为根Root的结点&#xff08;无直接前驱&#xff09; 如果n>1,除了根节点外&…...

window10安装MySQL数据库

准备好软件MySql的下载参考&#xff1a;(1137条消息) mysql下载与安装过程_weixin_40396510的博客-CSDN博客_mysql数据库下载安装(1137条消息) 安装MySQL的常见问题_二木成林的博客-CSDN博客_sc不是内部或外部命令,也不是可运行的程序解压要C盘&#xff08;自定义&#xff0c;本…...

羊了个羊游戏开发教程3:卡牌拾取和消除

本文首发于微信公众号&#xff1a; 小蚂蚁教你做游戏。欢迎关注领取更多学习做游戏的原创教程资料&#xff0c;每天学点儿游戏开发知识。嗨&#xff01;大家好&#xff0c;我是小蚂蚁。终于要写第三篇教程了&#xff0c;中间拖的时间有点儿长&#xff0c;以至于我的好几位学员等…...

SHA1详解

目录 一、介绍 二、与MD5的区别 1、对强行攻击的安全性 2、对密码分析的安全性 3、速度 三、应用 1、文件指纹 2、Git中标识对象 四、算法原理 1、填充消息 2、消息处理 3、数据运算 &#xff08;1&#xff09;链接变量 &#xff08;2&#xff09;步函数 一、介绍…...

Go并发介绍及其使用

1. goroutine Go语言通过go关键字来启动一个goroutine。注意&#xff1a;go关键字后面必须跟一个函数&#xff0c;不能是语句或者其他东西&#xff0c;函数的返回值被忽略。 goroutine有如下特性&#xff1a; go的执行是非阻塞的&#xff0c;不会等待。go后面的函数的返回值…...

小米手机屏幕解锁技巧精选

手机锁是一种保护存储的用户数据和信息的方法。存储在锁定手机中的所有信息比任何人都可以访问的手机安全得多。但有时&#xff0c;如果用户忘记了这些屏幕锁定&#xff0c;可能会造成麻烦。在此博客中&#xff0c;我们将帮助用户了解如何解锁小米手机。 什么时候需要解锁小米手…...

「SDOI2009」HH去散步

HH去散步 题目限制 内存限制&#xff1a;125.00MB时间限制&#xff1a;1.00s标准输入标准输出 题目知识点 动态规划 dpdpdp矩阵 矩阵乘法矩阵加速矩阵快速幂 思维 构造 题目来源 「SDOI2009」HH去散步 题目 题目背景 HH 有个一成不变的习惯&#xff0c;喜欢在饭后散步…...

用上Visual Studio后,我的世界游戏的构建时间减少了一半

今天我们讲述一个使用 Visual Studio 提升工作效率的案例。 我的世界(Minecraft) 游戏开发商 Mojang Studios 近日联系了 Visual Studio C 团队&#xff0c;因为他们需要将 C 开发扩展到新平台&#xff08;Linux&#xff09;&#xff0c;同时还希望保留他们现有的技术基础&…...

34、基于51单片机锂电池电压电流容量检测仪表LCD液晶显示 原理图PCB程序设计

方案选择 单片机的选择 方案一&#xff1a;AT89C52是美国ATMEL公司生产的低电压&#xff0c;高性能CMOS型8位单片机&#xff0c;器件采用ATMEL公司的高密度、非易失性存储技术生产&#xff0c;兼容标准MCS-51指令系统&#xff0c;片内置通用8位中央处理器(CPU)和Flash存储单元…...

【Java基础】泛型(一)-基础使用

本文以Java的官方文档为参考&#xff0c;辅以代码示例&#xff0c;尽可能详尽的叙述泛型的每一个特性 什么是泛型 泛型&#xff08;Generics&#xff09;也称为参数化类型&#xff08;parameterized types&#xff09;&#xff0c;也就是将类型本身作为接口、类、方法中的参数…...

学Python不会不知道NumPy计算包吧,带你五分钟看懂NumPy计算包

从今天我们就开始进入 Python 数据分析工具的教程。 前段时间数据分析和Python都讲了一点点&#xff0c;但是Python的数据库&#xff0c;讲的少了点&#xff0c;所以接下来就讲讲这些重要的常用数据库吧&#xff01;&#xff01;&#xff01; Python 数据分析绝对绕不过的四个…...

积水内涝监测——埋入式积水终端设备介绍

一、设备概述 埋入式积水终端是针对城市内涝推出的积水信息监测采集设备&#xff0c;采用超声波传感技术&#xff0c;对积水的深度进行精确的测量。产品能够在低温、腐蚀环境下可靠运行本产品特别适用于智慧城市中&#xff0c;对城市道路、社区低洼处的积水进行实时监测上报到…...

Kafka的日志同步

首先介绍下LEO和HW LEO&#xff1a; 即LogEndOffset&#xff0c;表示该副本下次日志记录的偏移量HW&#xff1a;即HighWatermark&#xff0c;高水位线&#xff0c;是所有ISR副本集合中的LEO最小值上图中&#xff0c;如果此时三个副本都在ISR集合中&#xff0c;那么此时他们的LE…...

【Mybatis源码解析】mapper实例化及执行流程源码分析

文章目录简介环境搭建源码解析基础环境&#xff1a;JDK17、SpringBoot3.0、mysql5.7 储备知识&#xff1a;《【Spring6源码・AOP】AOP源码解析》、《JDBC详细全解》 简介 基于SpringBoot的Mybatis源码解析&#xff1a; 1.如何对mapper实例化bean 在加载BeanDefinition时&a…...

分布式文件管理系统(MinIO)

1.去中心化&#xff0c;每个点是对等的关系&#xff0c;通过Ngix对负载做均衡工作。 好处&#xff1a; 能够避免单点故障&#xff0c;将多块硬盘组成一个对象存储服务。 2. 使用纠删编码技术来保护数据&#xff0c;是一种回复丢失和损坏的数据的数学算法&#xff0c;他将数据分…...

Springcloud-配置中心config

一、添加依赖<dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-config-server</artifactId></dependency><dependency><groupId>org.springframework.boot</groupId><artifactId&…...

[项目篇] 音乐播放器开发报告

文章目录1. 项目描述:2. 项目上线展现&#xff1a;3. 项目具体实现&#xff1a;1. 登录2. 注册3.退出系统4.添加音乐4.1前后端交互约定4.2上传文件业务逻辑&#xff1a;4.3创建model包中的music类4.4在MusicMapper接口中&#xff0c;声明insertMusic抽象方法4.5在mybatis包中添…...

Spring Cloud Alibaba--gateway微服务详解之网关(二)

1、网关介绍 上篇对微服务中的nacos注册中心进行集成讲解。nacos主要作用是管理多服务之间复杂关系的组件。微服务是非常庞大且问题突出的架构&#xff0c;HTTP协议具有跨源资源共享 (CORS) Cross- Origin Resource Sharing机制&#xff0c;而处于安全考虑往往前端架构都会对跨…...

Zynq非VDMA方案实现视频3帧缓存输出,无需SDK配置,提供工程源码和技术支持

目录1、前言2、VDMA的不便之处3、FDMA取代VDMA实现视频缓存输出4、Vivado工程详解5、上板调试验证并演示6、福利&#xff1a;工程代码的获取1、前言 对于Zynq和Microblaze的用户而言&#xff0c;要想实现图像缓存输出&#xff0c;多半要使用Xilinx推荐的VDMA方案&#xff0c;该…...

血液透析过滤芯气密性检测装置中的高精度多段压力控制解决方案

摘要&#xff1a;针对目前血液过滤芯气密性检测过程中存在的自动化水平较低、多个检测压力之间需人工切换和压力控制精度较差的问题&#xff0c;为满足客户对高精度和自动化气密性检测的要求&#xff0c;本文提出了相应的解决方案。解决方案的主要特点是全过程的可编程压力控制…...

盘古信息PCB行业解决方案:以全域场景重构,激活智造新未来

一、破局&#xff1a;PCB行业的时代之问 在数字经济蓬勃发展的浪潮中&#xff0c;PCB&#xff08;印制电路板&#xff09;作为 “电子产品之母”&#xff0c;其重要性愈发凸显。随着 5G、人工智能等新兴技术的加速渗透&#xff0c;PCB行业面临着前所未有的挑战与机遇。产品迭代…...

遍历 Map 类型集合的方法汇总

1 方法一 先用方法 keySet() 获取集合中的所有键。再通过 gey(key) 方法用对应键获取值 import java.util.HashMap; import java.util.Set;public class Test {public static void main(String[] args) {HashMap hashMap new HashMap();hashMap.put("语文",99);has…...

Nginx server_name 配置说明

Nginx 是一个高性能的反向代理和负载均衡服务器&#xff0c;其核心配置之一是 server 块中的 server_name 指令。server_name 决定了 Nginx 如何根据客户端请求的 Host 头匹配对应的虚拟主机&#xff08;Virtual Host&#xff09;。 1. 简介 Nginx 使用 server_name 指令来确定…...

WordPress插件:AI多语言写作与智能配图、免费AI模型、SEO文章生成

厌倦手动写WordPress文章&#xff1f;AI自动生成&#xff0c;效率提升10倍&#xff01; 支持多语言、自动配图、定时发布&#xff0c;让内容创作更轻松&#xff01; AI内容生成 → 不想每天写文章&#xff1f;AI一键生成高质量内容&#xff01;多语言支持 → 跨境电商必备&am…...

UR 协作机器人「三剑客」:精密轻量担当(UR7e)、全能协作主力(UR12e)、重型任务专家(UR15)

UR协作机器人正以其卓越性能在现代制造业自动化中扮演重要角色。UR7e、UR12e和UR15通过创新技术和精准设计满足了不同行业的多样化需求。其中&#xff0c;UR15以其速度、精度及人工智能准备能力成为自动化领域的重要突破。UR7e和UR12e则在负载规格和市场定位上不断优化&#xf…...

代理篇12|深入理解 Vite中的Proxy接口代理配置

在前端开发中,常常会遇到 跨域请求接口 的情况。为了解决这个问题,Vite 和 Webpack 都提供了 proxy 代理功能,用于将本地开发请求转发到后端服务器。 什么是代理(proxy)? 代理是在开发过程中,前端项目通过开发服务器,将指定的请求“转发”到真实的后端服务器,从而绕…...

Java 二维码

Java 二维码 **技术&#xff1a;**谷歌 ZXing 实现 首先添加依赖 <!-- 二维码依赖 --><dependency><groupId>com.google.zxing</groupId><artifactId>core</artifactId><version>3.5.1</version></dependency><de…...

JVM 内存结构 详解

内存结构 运行时数据区&#xff1a; Java虚拟机在运行Java程序过程中管理的内存区域。 程序计数器&#xff1a; ​ 线程私有&#xff0c;程序控制流的指示器&#xff0c;分支、循环、跳转、异常处理、线程恢复等基础功能都依赖这个计数器完成。 ​ 每个线程都有一个程序计数…...

基于SpringBoot在线拍卖系统的设计和实现

摘 要 随着社会的发展&#xff0c;社会的各行各业都在利用信息化时代的优势。计算机的优势和普及使得各种信息系统的开发成为必需。 在线拍卖系统&#xff0c;主要的模块包括管理员&#xff1b;首页、个人中心、用户管理、商品类型管理、拍卖商品管理、历史竞拍管理、竞拍订单…...

现有的 Redis 分布式锁库(如 Redisson)提供了哪些便利?

现有的 Redis 分布式锁库&#xff08;如 Redisson&#xff09;相比于开发者自己基于 Redis 命令&#xff08;如 SETNX, EXPIRE, DEL&#xff09;手动实现分布式锁&#xff0c;提供了巨大的便利性和健壮性。主要体现在以下几个方面&#xff1a; 原子性保证 (Atomicity)&#xff…...