数据结构学习笔记(V):树与二叉树

news2025/1/20 21:53:52

目录

1 树

1.1 树的定义和基本术语

1.定义

2.基本术语

1.2 树的性质

2 二叉树

2.1 二叉树的定义和基本术语

1.定义

2.特殊二叉树

2.2 二叉树性质

2.3 二叉树存储结构

1.顺序存储

2.链式存储

3 二叉树进阶

3.1 二叉树顺序遍历

1.先序遍历

2.中序遍历

3.后序遍历

3.2 二叉树层次遍历

3.3 遍历序列构造二叉树

1.前序+中序

2. 后序+中序

3.层序+中序

3.4 线索二叉树

1.二叉树的中序遍历序列

2.线索二叉树作用

2.对比

3.5 二叉树线索化

1.中序线索化

2.先序线索化

3.后序线索化

3.6 线索二叉树前驱后继 

4 树和森林

4.1 树的存储结构

1.双亲表示法

2.孩子表示法

3.孩子兄弟表示法

4.2 树和森林的遍历

1.树的遍历

2.森林遍历

5 二叉树应用

5.1 二叉排序树

1.定义

2.查找

3.插入

4.构造

5.删除

6.查找效率分析

5.2 平衡二叉树

1.定义

2.不平衡问题调整

3.查找效率分析

5.3 哈夫曼树

1.带权路径长度

2.定义

3.构造

4.哈夫曼编码


1 树

1.1 树的定义和基本术语

1.定义

2.基本术语

·属性

结点的层次:从上往下;结点的高度:从下往上;树的高度:层数;结点的度:分支数;树的度:各结点度的最大值

·有序树

树中各结点子树从左至右是有次序的,可以互换。无序树与之相反。 

·森林

森林是m棵互不相交的树都集合

1.2 树的性质

1.结点数 = 总度数 + 1

2.m叉树:每个结点最多只能有m个分支的树,允许所有结点的度 < m,且可以是空树

3.度为m的树第i层至多有m^(i-1)个结点

4.

 5.

 

 6.

2 二叉树

2.1 二叉树的定义和基本术语

1.定义

2.特殊二叉树

·满二叉树:一棵高度为h,且含有2^h - 1个结点的二叉树

·完全二叉树

  

·二叉排序树

左子树所有结点关键字均小于根结点的关键字;右子树所有结点关键字均大于根结点的关键字

·平衡二叉树

树上任一结点的左子树和右子树的深度之差不超过1

2.2 二叉树性质

·二叉树性质

·完全二叉树性质

2.3 二叉树存储结构

1.顺序存储

普通二叉树的顺序存储中,要将二叉树的结点编号与完全二叉树对应起来,但会导致存储空间浪费。

2.链式存储

 n个结点的二叉链表有n+1个空链域

3 二叉树进阶

3.1 二叉树顺序遍历

1.先序遍历

根左右-->前缀表达式

2.中序遍历

左根右-->中缀表达式(需加界限符)

3.后序遍历

左右根-->后缀表达式

3.2 二叉树层次遍历

3.3 遍历序列构造二叉树

顺序遍历不能唯一确定一棵二叉树

1.前序+中序

2. 后序+中序

3.层序+中序

3.4 线索二叉树

1.二叉树的中序遍历序列

 缺点:遍历操作从根开始,寻找前驱与后继不方便

2.线索二叉树作用

中序

 左右线索标志,tag == 0,指针指向孩子;tag == 1,指针指向线索

2.对比

3.5 二叉树线索化

1.中序线索化

若左子树为空,建立前驱线索

2.先序线索化

3.后序线索化

3.6 线索二叉树前驱后继 

4 树和森林

4.1 树的存储结构

1.双亲表示法

顺序存储法, 每个结点中保存指向双亲的指针

2.孩子表示法

顺序+链式存储法:顺序存储每个节点,节点中保存子树链表头指针

3.孩子兄弟表示法

链式存储:保存第一个孩子和右兄弟指针

 可以完成树和二叉树的转化,森林和二叉树相互转化

4.2 树和森林的遍历

1.树的遍历

·先根遍历:若树非空,先访问根结点,再依次对每棵子树进行先根遍历

·后根遍历:若树非空,先依次对每棵子树进行后根遍历,再访问根结点

·层次遍历:①若树非空,则根节点入队;②若队列非空,队头元素出队并访问,同时将该元素的孩子依次入队;③重复②直到队列为空

2.森林遍历

·先序遍历:访问森林中第一棵树的根结点;先序遍历第一棵树中根结点的子树森林;先序遍历除去第一棵树之后剩余的树构成的森林。

·中序遍历:中序遍历森林中第一棵树的根结点的子树森林。访问第一棵树的根结点;中序遍历除去第一棵树之后剩余的树构成的森林。  

5 二叉树应用

5.1 二叉排序树

1.定义

二叉排序树又称二叉查找树(BST),其左子树结点值 < 根结点值 < 右子树结点值。使用中序遍历,可以得到一个递增的有序序列

2.查找

3.插入

4.构造

 

5.删除

6.查找效率分析

查找长度:查找运算中,需要对比关键字的次数称为查找长度,反映了查找操作时间复杂度 

平均查找长度:(层数 * 层结点数)的总和 / 总结点数

5.2 平衡二叉树

1.定义

平衡二叉树(Balanced Binary Tree),简称平衡树(AVL树)――树上任一结点的左子树和右子树的高度之差不超过1。

结点的平衡因子 = 左子树高 - 右子树高。AVL树结点平衡因子只能是-1、0、1

2.不平衡问题调整

3.查找效率分析

5.3 哈夫曼树

1.带权路径长度

·结点的权:有某种现实含义的数值

·结点的带权路径长度:从树都根到该结点的路径长度与该结点上权值的乘积

·树都带权路径长度:树中所有叶结点的带权路径长度之和

2.定义

3.构造

4.哈夫曼编码

字符集中的每个字符作为一个叶子结点,每个字符出现的频度作为结点的权值,构造哈夫曼树。 

 

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

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

相关文章

第十二周总结

这周我来总结一下数论分块和佩尔方程&#xff1a; 已知正整数n&#xff0c;求&#xff0c;对n/i下取整&#xff0c;相当于把一组数分块了&#xff0c;首先我们来找一下规律&#xff1a;n20时 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 …

现代密码学导论-20-流密码

目录 3.6 实际操作和加密方式 3.6.1 流密码 CONSTRUCTION 3.30 使用伪随机函数构造流密码 3.6.2 流密码的同步模式 CONSTRUCTION 3.31 流密码的异步模式 3.6 实际操作和加密方式 现代密码学导论-14-基于伪随机发生器的EAV安全_南鸢北折的博客-CSDN博客 CONSTRUCTION 3.17…

Spring Cloud整合Nacos集群

目录 第一章 微服务架构图 第二章 Spring Cloud整合Nacos集群 第三章 Spring Cloud GateWay 第四章 Spring Cloud Alibaba 整合Sentinel 第五章 Spring Cloud Alibaba 整合SkyWalking链路跟踪 第六章 Spring Cloud Alibaba 整合Seata分布式事务 第七章 Spring Cloud 集成Auth用…

计量数据分析数据库-Stata分析包使用指南、计量分析资料等八大数据大全

一、计量前沿stata 分析包使用指南 当考虑自变量X对因变量Y的影响时&#xff0c;如果X通过影响变量M来影响Y,则称M为中介变量&#xff08;mediator或mediating variable) (Judd & Kenny, 1981; Baron &Kenny,1986)。X通过中介变量M对Y产生的影响就是中介效应&#xff…

【深入理解C++】可调用对象、std::function、std::bind()

文章目录1.可调用对象1.1 函数指针1.2 具有operator()成员函数的类对象/仿函数/函数对象1.3 可被转换为函数指针的类对象1.4 类成员函数指针2.std::function2.1 绑定普通函数2.2 绑定类的静态成员函数2.3 绑定具有operator()成员函数的类对象2.4 绑定可被转换为函数指针的类对象…

【无标题】SAR雷达系统反设计及典型目标建模与仿真实现研究——目标生成与检测(Matlab代码实现)

&#x1f352;&#x1f352;&#x1f352;欢迎关注&#x1f308;&#x1f308;&#x1f308; &#x1f4dd;个人主页&#xff1a;我爱Matlab &#x1f44d;点赞➕评论➕收藏 养成习惯&#xff08;一键三连&#xff09;&#x1f33b;&#x1f33b;&#x1f33b; &#x1f34c;希…

408考研科目《数据结构》第八章第一节:排序的基本概念和插入排序(直接插入排序,折半插入排序,希尔排序)

文章目录教程1.排序的基本概念1.1 排序算法的评价指标1.2 排序算法的分类2. 插入排序2.1 直接插入排序2.1.1 算法效率分析2.2 折半插入排序总结2.3 希尔排序 &#xff08;Shell Sort&#xff09;总结教程 排序&#xff1a; https://www.bilibili.com/video/BV1b7411N798/?p77…

队列——算法专项刷题(七)

七、队列 常用于辅助遍历树&#xff0c;设计队列先进先出特性的数据结构 7.1 滑动窗口的平均值 给定一个整数数据流和一个窗口大小&#xff0c;根据该滑动窗口的大小&#xff0c;计算滑动窗口里所有数字的平均值。 实现 MovingAverage 类&#xff1a; MovingAverage(int si…

图书管理系(附源码PPT)

图书管理系统1 绪 论1.1 研究背景1.2 研究意义1.3 相关研究现状1.3.1 高校图书管理面临的问题1.3.2 信息化为图书管理带来新变化2 相关技术2.1 JSP 概述2.2 MySQL 数据库技术2.3 Spring2.4 SpringMVC2.5 Dbcp2.6 Maven3 系统分析3.1 需求分析3.1.1 系统的功能需求分析3.1.2 系统…

利用衍射表面消色差的混合目镜建模

1. 摘要 同时具有折射和衍射表面的混合透镜已成为一种极具潜力的解决方案应用于多种领域。在此案例中&#xff0c;我们将演示混合目镜的一个例子&#xff0c;其中利用衍射透镜表面对色差进行了校正。由ZemaxOpticStudio进行初始化设计&#xff0c;并导入VirtualLab Fusion进行进…

TensorRt(2)快速入门介绍

文章目录1、使用ONNX部署的示例1.1、导出模型1.2、设置batch size批处理大小1.3、指定数值精度1.4、转换模型1.5、部署模型2、使用ONNX转换为engine再部署的示例2.1、导出ONNX模型2.1.1、从TensorFlow中导出ONNX2.1.1、从PyTorch中导出ONNX2.2、ONNX 转化为 TensorRT Engine2.3…

27个超实用Chrome控制台调试技巧 Source 全局搜索(关注更新)

谷歌开发者工具提供了一系列的功能来帮助开发者高效 Debug 网页应用&#xff0c;让他们可以更快地查找和修复 bug。在谷歌的开发者工具中&#xff0c;有非常多有用的小工具&#xff0c;但是很多开发者并不知道。通过这篇文章&#xff0c;我把我常用的那些高效 Debug 的 Chrome …

ARM 汇编指令集1_2

一、两个概念&#xff1a;指令与伪指令 &#xff08;汇编&#xff09;指令&#xff0c;是 CPU 机器指令的助记符&#xff0c;经过编译后会得到一串10组成的机器码&#xff0c;可以由 CPU 读取执行。&#xff08;汇编&#xff09;伪指令&#xff0c;本质上不是指令&#xff08;…

版本控制利器——changelog

问题描述 当前&#xff0c;我们项目需要进行版本的确定&#xff0c;人工审核代码已接近尾声&#xff0c;但为了防止后续继续出现该问题&#xff0c;我希望能够做到在每次push到master时&#xff0c;更新changelog 将每一个版本的commit记录下来&#xff0c;类似于下列 解决…

K8s 集成 Jenkins 部署Go Web项目

风离不摆烂学习日志 Day9 K8s 集成 Jenkins 部署Go Web项目 Dockerfile FROM golang:alpine as builder # 需要go环境 MAINTAINER fl1906WORKDIR /work # 源 RUN go env -w GOPROXYhttps://goproxy.cn && go env -w CGO_ENABLED0 && go env -w GO111MODULEon C…

Splunk UBA 从 Ldap 成功导入 HR 数据

1: 今天在配置Splunk UBA 的HRdata 和asset data 的时候,都要用到ldap, 所以还非要装add-on:\ add-on 的名字: Splunk Supporting Add-on for Active Directory (SA-LDAPSearch) (SA-LDAPSearch) 这个add-on 的配置: Configure the Splunk Supporting Add-on for Activ…

使用腾讯云cos搭建图片服务器

背景 当我们能不希望把图片上传到自己的服务器时&#xff0c;可以采用腾讯云cos帮我们免费代图片&#xff0c;我们只需要在自己的数据库里保存一个图片地址就行了 二、注册账号免费试用 1、注册腾讯云账号 按照腾讯云的注册方式&#xff0c;注册自己的账号 2、实名认证 选择个…

blender boxCutter插件

boxCutter可以用来进行bool运算 打开boxCutter 方法1&#xff1a;物体模式在舞台左侧选择boxCutter图标 方法2&#xff1a;物体模式按N&#xff0c;在舞台右侧的侧边栏里选择boxCutter 方法3 物体模式alta 打开BoxCutter后&#xff0c;舞台上方&#xff0c;N键的弹出菜单&…

进行 Spring 6 迁移的最佳方式

介绍 在本文中&#xff0c;我们将了解如何将现有应用程序迁移到Spring 6以及如何充分利用此升级。 本文中的提示基于我在Hypersistence Optimizer和高性能 Java Persistence 项目中添加对 Spring 6 的支持所做的工作。 爪哇 17 首先&#xff0c;Spring 6 将最低 Java 版本提…

2022.11.27 学习周报

文章目录摘要文献阅读1.题目2.摘要3.介绍4.基于后向传播算法的多时间尺度RNN4.1 循环神经网络&#xff08;RNN&#xff09;4.2 基于多时间尺度的RNN预测模型5.实验5.1 数据简介5.2 数据分析5.3 评价指标5.4 实验结果6.结论深度学习1.循环神经网络&#xff08;RNN&#xff09;1.…