数据结构——树(终极版)

news2024/11/13 11:37:50

树的基本概念:

树的顶部是根节点也是树的入口

父节点:例如:B是F的父节点

子节点:树中的每个节点都可以有0个或多个子节点

叶子节点:像KLFGMIJ这种没有子节点的节点

节点的度:节点的子节点数;例如:B的度为2,D的度为3

树的度:所有节点最大度称为该树的度,该树的度为3

节点的层次:可以表示该节点在树中的相对位置

堂兄弟节点:双亲在同一层;例如:G和H的双亲在同一层,则G和H为堂兄弟节点

节点深度:从根节点开始,达到指定节点的层数为节点深度,例如,D的层数为2所以深度为2

节点高度:从该结点出发到离它最远的叶子节点的层数,例如D出发到M的距离为2,所以D的高度为2

树的高度/深度:指的是该树最大的层数,该树最大的层数为4

二叉树:

单节点树:有一个结点的树

空结点树:根节点为空、

左斜树:只有左子节点

右斜树:只有右子节点

满二叉树:

完全二叉树:

除叶子节点以外所有节点必须填满,并且叶子节点要靠左排序

数组存储二叉树:

数组存储方式主要适用于满二叉树或完全二叉树,

用数组存储中要求节点的位置与索引之间存在明确的映射关系,这种映射关系是按照完全二叉树或满二叉树设计的,如果不是完全二叉树则会浪费一些空间用空位来表示空缺节点

使用数组存储利用率较低,一般使用链表存储

左子:

右子:

二叉树的链表存储:

二叉树结点数:n

指针域数量:2n

非空指针域数:n-1(减去的为根节点)

空指针域数量:n+1

0.递归:

递:将问题拆解成子问题,子问题再拆解为子问题,直到被拆解的问题是最小的子问题

归:最小的子问题被解决了那么上一层也被解决,上上一次也被解决,一直到最开始的问题被解决

编程中,在函数调用本身

1.树的存储结构:

双亲表示法:

用的数组存储

孩子表示法:

用链表

孩子兄弟表示法:

用二叉链表存储

也就是说链表左指针指向第一个孩子,右指针指向兄弟

例如:A的左指针指向左孩子D,右指针指向兄弟B,B没有孩子左指针制空,右指针指向兄弟C

2.二叉树的遍历:

前序遍历:

遍历顺序:根、左、右

void PreOrder(BiTree T){
	if(T != NULL){
		visit(T);	//访问根节点
		PreOrder(T->lchild);	//递归遍历左子树
		PreOrder(T->rchild);	//递归遍历右子树
	}
}

中序遍历:

遍历顺序:左根右

void InOrder(BiTree T){
	if(T != NULL){
		InOrder(T->lchild);	//递归遍历左子树
		visit(T);	//访问根结点
		InOrder(T->rchild);	//递归遍历右子树
	}
}

后序遍历:

遍历顺序:左右根

void InOrder(BiTree T){
	if(T != NULL){
		InOrder(T->lchild);	//递归遍历左子树
		visit(T);	//访问根结点
		InOrder(T->rchild);	//递归遍历右子树
	}
}

例题:

前序遍历:A B D E C F G

中序遍历:D B E A F C G

后序遍历: D E B F G C A

层次遍历:

按照层次遍历:A B C D E F G H I

3.线索二叉树:

线索二叉树是一种改进的二叉树,其中空指针(即没有左右子树的节点)被用来指向节点的前驱或后继。这样可以在遍历树时更高效地访问节点,而不需要使用额外的栈或递归。

前序线索二叉树:

先把二叉树进行前序遍历

像D E C F这种有空指针的将它们的指针指向前驱。

例如:D前驱节点指向B后驱节点指向E,F前驱节点指向C后驱节点为NULL

中序线索二叉树:

后序线索二叉树:

4.森林、树、二叉树之间的转换

树转换为二叉树:

  1. 每层连线
  2. 把多余的枝子减去
  3. 调整形状

我感觉有点像那个孩子兄弟表示法,孩子放左边,孩子的兄弟放右边

二叉树转为树:

  1. 右分支水平拉起
  2. 连接每层老大的双亲
  3. 删掉水平线

就是把右边的兄弟都放到该放的位置上

森林转二叉树

  1. 森林先分别转为二叉树
  2. 前者的根右分支连接后者的根节点

二叉树转为森林:

  1. 如果二叉树根节点右右孩子,切断联系
  2. 然后把每棵二叉树转为树

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

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

相关文章

新160个crackme - 059-Dope2112.1

运行分析 输入Name和Serial,点击Registrieren按钮,显示疑似错误提示 百度翻译查看一下,发现是德语 PE分析 Delphi程序,32位,无壳 静态分析&动态调试 ida字符串发现正确提示,双击跟进 来到关键函数&…

现在量化中普遍使用QMT和PTrade?哪家可以同时提供QMT/PTrade?

QMT的特点 全面的功能集成: QMT集成了行情显示、策略研究、交易执行和风控管理于一体,为投资者提供了一站式的量化交易解决方案。 高效的交易执行能力: 通过全内存交易实现低延迟的交易执行,单笔延时小于1ms,确保了交易…

秒懂C++之智能指针

目录 前言 智能指针的使用及原理 RAII RAII弊端 std::auto_ptr std::unique_ptr std::shared_ptr shared_ptr弊端 std::weak_ptr 扩展(删除器) 前言 为了解决抛异常所造成的内存泄漏等问题~秒懂C之异常-CSDN博客~我们来学习智能指针的相关用法…

【图像匹配】基于SIFT算法的图像匹配,matlab实现

博主简介:matlab图像代码项目合作(扣扣:3249726188) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 本次案例是基于基于SIFT算法的图像匹配,用matlab实现。 一、案例背景和算法介绍 本…

【MySQL】MySQL中JDBC编程——MySQL驱动包安装——(超详解)

前言: 🌟🌟本期讲解Java中JDBC编程,希望能帮到屏幕前的你。 🌈上期博客在这里:【MySQL】MySQL索引与事务的透析——(超详解)-CSDN博客 🌈感兴趣的小伙伴看一看小编主页&a…

【Linux】初识信号与信号产生

目录 一、认识信号 1 .什么是信号 2 .哪些情况会产生信号 3 . 查看信号 4 . 信号处理 二、产生信号 1 .通过终端按键产生信号 2 .调用系统函数向进程发信号 3 . 由软件条件产生信号 4 . 由硬件异常产生信号 一、认识信号 1 .什么是信号 你在网上买了很多件商品,再…

技术上,如何复现 o1?

知乎:周舒畅链接:https://zhuanlan.zhihu.com/p/720127190 基础模型 搞 o1 首先需要一个基模,这个基模必须是: 能进行“长”生成。注意这和“长 context”不是一回事。模型生成的结果,经常会有自激的噪声存在&#xf…

Unity多国语言支持

Unity多国语言支持 项目在我的课程 ”淘金城堡“ 中应用 项目的地址:http://t.csdnimg.cn/m0hFd 一、基本概念 在Unity中加入多国语言的支持可以让我们发布的游戏或应用上线在拥有不同语言的国家或地区。 下面介绍一款Unity官方提供的插件“Localization package…

USB中的传输和事务

文章目录 一、USB中的四种事务1. **控制事务(Control Transaction)**2. **批量事务(Bulk Transaction)**3. **中断事务(Interrupt Transaction)**4. **等时事务(Isochronous Transaction&#x…

C++第五十弹---类型转换全解析:从静态到动态,一网打尽

✨个人主页: 熬夜学编程的小林 💗系列专栏: 【C语言详解】 【数据结构详解】【C详解】 目录 1. C语言中的类型转换 2. 为什么C需要四种类型转换 2.1、内置类型 -> 自定义类型 2.2、自定义类型 -> 内置类型 2.3、自定义类型 -&…

Suno新上线Covers翻唱新 - 实现音频风格任意转换

历史文章 Suno AI如何解决中文多音字的问题?耗费500积分,亲测有效 ,V4版本会不会直接支持呢? 上传音频,打造贴合您喜好的风格歌曲创作,这一波新玩法我打8分 Suno AI Noisee AI 做抖音冥想账号实操 音乐…

网络安全-利用 Apache Mod CGI

一、环境 蚁剑官网拉取 二、开始操作 蚁剑连接 一样终端命令不能执行 可以看到putenv已经禁用 我们开始一下,跳入一个新终端且可以执行命令 我们具体看一下干了什么事情 上传了一个htaccess这个文件的作用是让以后所有ant文件都以cgi去执行 三、总结 cgi文件可以…

【C++】C++的多态

目录 多态的使用 多态的概念 多态的定义和实现 虚函数 构成多态的条件 特殊情况:协变 析构函数的重写 怎么实现 为什么实现 override和final关键字 override final 重载/重写/隐藏的对比 纯虚函数和抽象类 纯虚函数 抽象类 多态的实现 虚函数表指针…

魔方财务安装指南

本文将详细介绍魔方财务的安装、升级和迁移过程,确保您能够顺利地部署和使用魔方财务系统。 服务器配置一览表 以下是魔方财务1.0.0及更高版本的最低和推荐系统要求: 需求名称推荐配置最低要求OSCentOS/Debian/UbuntuLinux(不要使用window…

IP协议及相关特性

IP协议负责地址管理和路由选择。它的组成为: 接下来我们将对其中较重要的部分进行介绍。 4位版本:这里的四位版本只有两个取值 分别为IPv4和IPv6,这两个额分别为不同的IP协议,但是现在主流的还是IPv4但是近年来IPv6在中国的普及率…

2022高教社杯全国大学生数学建模竞赛C题 问题一(1) Python代码演示

目录 问题 11.1 对这些玻璃文物的表面风化与其玻璃类型、纹饰和颜色的关系进行分析数据探索 -- 单个分类变量的绘图树形图条形图扇形图雷达图Cramer’s V 相关分析统计检验列联表分析卡方检验Fisher检验绘图堆积条形图分组条形图分类模型Logistic回归随机森林import matplotlib…

中秋之际,唱响工体!玛丽亚·凯莉2024演唱会北京站璀璨上演

续写传奇华章 启幕音乐盛典 中秋之际,全国数万乐迷翘首以待的音乐盛典如约而至。时隔多年,传奇天后玛丽亚凯莉惊艳开唱工体! 夜幕降临,圆月高悬,在不绝于耳的欢呼声中,玛丽亚凯莉以一袭流光溢彩的礼服优雅…

【LIO】FAST-LIO论文详解

FAST-LIO论文详解 1. 摘要2. 简介1. 相关工作A. LiDAR 里程计和地图绘制 2. 实现方法A. 基础知识1. 连续模型在这里插入图片描述 B. 激光雷达测量的预处理C. 状态估计1) 前向传播:2) 反向传播与运动补偿:3) 残差计算: 1. 摘要 提出了一种计算…

简单题21 - 合并两个有序链表(Java)20240917

问题描述: java代码: /*** Definition for singly-linked list.* public class ListNode {* int val;* ListNode next;* ListNode() {}* ListNode(int val) { this.val val; }* ListNode(int val, ListNode next) { this.val val…

Java 技巧 如何在IDEA2024 中快速打出System.out.println();

1.基本用法 键入sout回车 回车后变成: 2.打印变量 快速打印变量,以打印变量名为set为例,set.sout回车, 回车后变成