【数据结构】树和森林

树的存储结构

  1. 双亲表示法

定义结构数组,存放树的结点,每个结点含两个域:

​ 数据域:存放结点信息

​ 双亲域:指示结点的双亲结点在数组中的位置

typedef struct PTNode{TElemType data;int parent;
}PTNode;
#define MAX_TREE_SIZE 100
typedef struct{PTNode nodes[MAX_TREE_SIZE];int r,n;		//根节点的位置和结点个数
};
  1. 孩子链表

把每个结点的孩子结点排列起来,看成一个线性表,用单链表存储

则n个结点有n个孩子链表(叶子的孩子链表为空表)。

n个头指针又组成一个线性表,用顺序表存储

在这里插入图片描述

孩子结点结构:

| child | next |

typedef struct CTNode{int child;struct CTNode *next;
}*ChildPtr;

双亲结点结构:

| data | firstchild |

typedef struct{TElemType data;ChildPtr firstchild;//孩子链表头指针
}CTBox;

树结构:

typedef struct{CTBox nodes[MAX_TREE_SIZE];int n,r;	//结点数和根节点位置
}CTree;
  1. 孩子兄弟表示法

实现:用二叉链表作为树的存储结构,链表中的每个结点的两个指针域分别指向其第一个孩子结点和下一个兄弟结点

typedef struct CSNode{ElemType data;struct CSNode *firstchild, *nextsibling;
}CSNode, *CSTree;

树和二叉树的转换

树转换成二叉树

  1. 加线:在兄弟之间加一条线
  2. 抹线:对每个结点,除了其左孩子外,去除其余孩子之间的关系
  3. 旋转:以根节点为轴心,整体顺时针转45°

二叉树转换成树

  1. 加线:若p结点时双亲结点的左孩子,则将p的右孩子,右孩子的右孩子…沿分支找到的所有右孩子,都与p的双亲用线连起来
  2. 抹线:抹掉原二叉树中双亲与右孩子的连线
  3. 调整:将结点按层次排列,形成树的形状

森林和二叉树的转换

森林转换成二叉树

  1. 将各棵树分别转换成二叉树
  2. 将每棵树的根节点用线相连
  3. 以第一棵树根节点为二叉树的根,再以根节点为轴心,顺时针旋转,构成二叉树

二叉树转换成森林

  1. 抹线:将二叉树中根节点与其右孩子连线,即沿右分支搜索到的所有右孩子之间的连线全部抹掉,是之变成孤立的二叉树
  2. 还原:将孤立的二叉树还原成树

树和森林的遍历

树的遍历

  1. 先根遍历:若树不空,先访问根节点,然后依次先根遍历各子树
  2. 后根遍历:若树不空,先依次后根遍历各子树,然后访问根节点
  3. 层次遍历:若树不空,则自上而下、自左而右访问树中的节点

森林的遍历

将森林看作三部分

  1. 森林中第一棵树的根节点
  2. 森林中第一棵树的子树森林
  3. 森林中其它树构成的森林

先序遍历:

若森林不空,则

  1. 访问森林中第一棵树的根节点
  2. 先序遍历森林中第一棵树的子树森林
  3. 先序遍历森林中其它树构成的森林

即:依次从左到右对森林中的每一棵树进行先根遍历

中序遍历:

若森林不空,则

  1. 中序遍历森林中第一棵树的子树森林
  2. 访问森林中第一棵树的根节点
  3. 中序遍历森林中其它树构成的森林

即:依次从左到右对森林中的每一棵树进行后根遍历

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

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

相关文章

Thonny IDE + MicroPython + ESP32 + GY-302 测量环境中的光照强度

GY-302是一款基于BH1750FVI光照强度传感器芯片的模块。该模块能够直接测量出环境中的光照强度,并将光照强度转换为数字信号输出。其具体参数如下表所示。 参数名称 参数特性 测量范围 0-65535 LX 测量精度 在环境光下误差小于20%,能够自动忽略50/60…

智创 AI 新视界 -- AI 时代的数据隐私保护挑战与应对(16 - 3)

💖💖💖亲爱的朋友们,热烈欢迎你们来到 青云交的博客!能与你们在此邂逅,我满心欢喜,深感无比荣幸。在这个瞬息万变的时代,我们每个人都在苦苦追寻一处能让心灵安然栖息的港湾。而 我的…

网上图书购物管理系统|Java|SSM|VUE| 前后端分离

【一】可以提供远程部署安装,包扩环境 【二】提供软件相关的安装包 【三】如果需要提供java入门资料可咨询 【技术栈】 1⃣️:架构: B/S、MVC 2⃣️:系统环境:Windowsh/Mac 3⃣️:开发环境:IDEA、JDK1.8、M…

双子气膜:科技与艺术的璀璨交融—轻空间

在城市的繁华一隅,即将崛起一座令人叹为观止的未来地标——双子气膜项目。这是由轻空间与国内知名企业强强联手打造的全新气膜球幕建筑,集合了尖端科技与视觉艺术,成为现代建筑领域的一次创意突破。 双子气膜:双球对称的震撼设计…

【全面】上市公司企业能源消耗数据(水、电、汽油、天然气、钢材等)2008-2022年

一、数据范围:包括水、电、汽油、天然气、钢材等3000多类能源,1.4万个样本。 二、资源类型:电 水 人均用电 人均用水 公务用车汽油 办公用水 办公用电 总行物业管理大楼办公用水 总…

双绞线直连两台电脑的方法及遇到的问题

文章目录 前言一、步骤二、问题总结:问题1:遇到ping不通的问题。问题2:访问其他电脑上的共享文件时提示输入网络凭证问题3:局域网共享文件时提示“没有权限访问,请与网络管理员联系请求访问权限” 前言 办公室里有两台电脑,一台装了显卡用于…

windows文件下换行, linux上不换行 解决CR换行符替换为LF notepad++

html文件是用回车换行的,在windows电脑上,显示正常。 文件上传到linux服务器后,文件不换行了。只有一行。而且相关js插件也没法正常运行。 用notepad查看,显示尾部换行符,是CR,这就是原因。CR是不被识别的。…

Android -- [SelfView] 自定义多行歌词滚动显示器

Android – [SelfView] 自定义多行歌词滚动显示器 流畅、丝滑的滚动歌词控件* 1. 背景透明;* 2. 外部可控制进度变化;* 3. 支持屏幕拖动调节进度(回调给外部);效果 歌词文件(.lrc) 一. 使用…

Android APP自学笔记

摘抄于大学期间记录在QQ空间的一篇自学笔记,当前清理空间,本来想直接删除掉的,但是感觉有些舍不得,因此先搬移过来。 Android导入已有外部数据库 2015.06.26在QQ空间记录:在Android中不能直接打开res aw目录中的数据…

python进阶-05-利用Selenium来实现动态爬虫

python进阶-05-利用Selenium来实现动态爬虫 一.说明 这是python进阶部分05,我们上一篇文章学习了Scrapy来爬取网站,但是很多网站需要登录才能爬取有用的信息,或者网站的静态部分是一个空壳,内容是js动态加载的,或者人机验证&…

网安瞭望台第10期:开源机器学习框架存在漏洞、GammaDrop 恶意软件

研究人员发现流行开源机器学习框架存在漏洞 网络安全研究人员披露了多个影响开源机器学习(ML)工具和框架(如 MLflow、H2O、PyTorch 和 MLeap)的安全漏洞,这些漏洞可能导致代码执行。这些漏洞由 JFrog 发现,…

Onchain 正在蚕食 Offchain

目录 未来在链上 价值创造 技术加速 机构采用 小队:加速链上经济 我们正在进入一个代码就是货币、信任被编程、全球接入打破传统经济界限的时代。这种新兴模式就是我们所说的链上经济。 在此领域,Solana 因其在基础设施和应用程序方面的持续创新而脱颖而…

brpc的二次封装以及brpc与etcd的联合

目的: 搭配etcd的注册中心管理能知道谁能提供什么服务,并用rpc进行服务调用 封装思想: 信道管理,将不同服务主机的通信信道管理起来 封装: 1.指定的信道管理类 一个服务通常会有多个节点,每个节点都会…

Adminer源码编译 精简语言中英文和基本使用方法

Adminer是一个小而强悍的基于web的数据库管理工具, 官方默认支持几十种语言,但是对于中国的用户而言只需要有中文和英文就够了,其他语言基本无用。这就需要我们下载Adminer源码自己编译 Adminer.php , 如下图所示 adminer 中英文语言精简版本…

OpenStack-Glance组件

Glance Glance使用磁盘格式和容器格式基础配置镜像转换 Glance 是 OpenStack 的镜像服务,负责存储、发现和管理虚拟机镜像。它允许用户创建和共享镜像,用于启动虚拟机实例。 Glance 的主要功能 (1)虚拟机镜像的管理 支持镜像的上…

Leetcode 每日一题 56.合并区间

目录 问题描述 示例 示例 1 示例 2 问题分析 算法设计 步骤 1:排序 步骤 2:合并区间 步骤 3:返回结果 过题图片 代码实现 复杂度分析 题目链接 结语 问题描述 给定一个区间数组 intervals,其中每个区间由两个整数 s…

Oceanbase离线集群部署

准备工作 两台服务器 服务器的配置参照官网要求来 服务器名配置服务器IPoceanbase116g8h192.168.10.239oceanbase216g8h192.168.10.239 这里选oceanbase1作为 obd机器 oceanbase安装包 选择社区版本的时候自己系统的安装包 ntp时间同步rpm包 联网机器下载所需的软件包 …

Bert的Transformer原理

多义词如何应对: 答:通过Self attention,不同的上下文,对同一个"苹果",得到截然不同的embedding激活值; Multi-head的作用: 有些类似CNN里用的多个卷积核得到多个Channel的特征图&…

AIDD-人工智能药物设计-化学自然语言引导的扩散式类药分子编辑:DiffIUPAC的魔法之旅

J. Pharm. Anal. | 化学自然语言引导的扩散式类药分子编辑:DiffIUPAC的魔法之旅 AIDD药研. 制药工程和生命科学背景,重点关注于计算机辅助药物设计(CADD)/药物筛选、分子动力学模拟MD,兽药信息学VetInformatics&…

ThinkPHP+Layui开发的ERP管理系统

ERP采购生产销售系统,一款基于ThinkPHPLayui开发的ERP管理系统,帮助中小企业实现ERP管理规范化,此系统能为你解决五大方面的经营问题:1.采购管理 2.销售管理 3.仓库管理 4.资金管理 5.生产管理,适用于:服装…