数据结构——5.4 树、森林

news2025/1/19 15:50:39

5.4 树、森林

  • 概念

在这里插入图片描述
在这里插入图片描述

  1. 树的存储结构

    1. 双亲表示法

    2. 孩子表示法

    3. 孩子兄弟表示法(二叉树表示法):

      二叉树每个结点有三个变量

      ① 二叉树结点值:原树结点的值

      ② 二叉树左孩子:原树结点的最左孩子

      ③ 二叉树右孩子:原树结点的紧邻右兄弟

      该二叉树有一个特点:根节点只有左子树

  2. 森林和二叉树的转换

    1. 把森林中每一棵树都转换成二叉树(根节点只有左子树)

    2. 相邻树的根节点作为左右兄弟,从而可以填补作为各二叉树的右子树

在这里插入图片描述
在这里插入图片描述

  1. 树和森林的遍历

    1. 树的遍历

      1. 先根遍历:先访问根节点,再依次从左至右先根遍历子树(即第一次路过就标记)

        (与该树对应二叉树的先序序列相同)(深度优先遍历)

      2. 后根遍历:先对各个子树对后根遍历,再访问根节点(即第三次路过才标记)

        (与该树对应二叉树的中序序列相同)(深度优先遍历)

      3. 层次遍历:(用队列辅助实现)每次结点出队,就将其孩子结点从左至右入队(广度优先遍历)

    2. 森林的遍历

      1. 先序遍历:从左至右先根遍历各个树(与该森林对应二叉树的先序序列相同)

      2. 中序遍历:从左至右后根遍历各个树(与该森林对应二叉树的中序序列相同)

在这里插入图片描述

  • 理解
  1. 二叉链表存储森林时,根节点的右节点为森林左起第二棵的根,森林可能只有一棵树,因此根节点的右节点可能为空

  2. 森林转换成二叉树后,二叉树的左子为森林结点的左孩子,右子为森林结点的右兄弟,左左子,右右兄。

  3. 如果两个结点是兄弟关系,那么必定有一条右直线连接两个结点,否则不是

  4. 树的重要性质:n个结点的树,有n-1条边

  5. 森林的重要性质:n棵树的森林,有m个结点,则有m-n个边。

  • 技巧
  1. 二叉链表存储森林时,根节点的右节点为森林左起第二棵的根,森林可能只有一棵树,因此根节点的右节点可能为空

  2. 森林原有n个非终端结点,二叉树没有右子树的结点,即为没有右兄弟的结点,共有:(n+1个)(右指针域为空)

    1. 每个非终端结点的最右孩子没有右兄弟(n个)

    2. 森林最右树的根节点没有右子树(1个)

  3. 森林或树的叶结点数=二叉树左子树为空结点数

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

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

相关文章

通用防重幂等如何设计?

防重与幂等的区别 防重与幂等是在 Web 应用程序和分布式系统中重要而又非常常见的问题。 防重 防重是指在多次提交同样的请求过程中,系统会检测和消除重复的数据,确保相同的数据只会被处理一次,从而避免不必要的重复操作或产生错误的结果。…

JS游戏项目合集【附源码】

文章目录 一:迷宫小游戏二:俄罗斯方块三:压扁小鸟 一:迷宫小游戏 【迷宫游戏】是一款基于HTML5技术开发的游戏,玩法简单。玩家需要在一个迷宫中找到出口并成功逃脱,本项目还有自动寻路(Track&a…

C#系列-Entity Framework 架构(18)

下图展示了EF的整体架构。现在让我们逐个地看看架构的各个组件: EF组件图 EDM(Entity Data Mode 实体数据模型):EDM 由三个主要部分组成:概念模型,映射和存储模型。 Conceptual Model(概念模型&#xff0…

编写Makefile

现在我们将创建一个程序,该程序能够读取次位码文件并打印其中定义的函数名称,以及它们的基本块数,从而显示LLVM库的易用性 什么是Makefile? C语言中,我们使用visual studio开发软件时候,写程序开始时候都…

compile error ESP32cam.h no such file or directory

解决方法 可以参考这篇文章: But first, you will need to download the esp32cam.h library. For this go to Github and download the esp32cam Zip. GitHub - yoursunny/esp32cam: OV2640 camera on ESP32-CAM, Arduino library 具体就是下面的这篇重要的文章 :

aardio 编辑GUI界面,调用 python 脚本示例

aardio 中调用 python 的方法有两种,py3 和 process.python 模块 py3 模块:如果经常要拿到python返回的值或从aardio中传数据给python去处理,aardio和python的交互比较多的话,可以考虑使用py3模块,缺点是:p…

多尺度神经网络新一代创新!精度与速度完美平衡,实现多领域应用落地

多尺度神经网络的设计通常基于对频率原则的理解,目的是为了解决高频成分学习慢的问题。这些网络通过特殊设计,比如给高频成分加更多的权重或者将高频成分平移到低频,来提高学习效率。 为了满足在不同层次上理解和处理数据的需求,…

C++:我真的,服了

即我用C做的一个石头剪刀布的“小”程序 上代码&#xff01;&#xff01;&#xff01; ​ #include <bits/stdc.h>//万能头 #include <windows.h>//定义Sleep函数&#xff0c;Sleep(x)即把程序暂停x毫秒 #include <stdlib.h> /*定义system函数&#xff0c;…

chatglm3-6b使用

源码地址 GitHub - THUDM/ChatGLM3: ChatGLM3 series: Open Bilingual Chat LLMs | 开源双语对话语言模型 创建环境 conda create -n chatglm36 python3.11.7 修改源码中依赖&#xff0c;使得使用cuda&#xff0c;否则太慢了 pip3 install torch2.1.2 torchvision0.16.2 to…

AIGC盛行,带你轻松调用开发

文章目录 前言一、&#x1f4d6;AIGC简介二、&#x1f4e3;开通体验开通模型获取API-KEY 三、&#x1f4dd;基于java实现调用1.设置API-KEY2.体验大语言模型多轮对话演示补充流式输出 3.体验通义千问VL使用官方提供照片本地文件多轮对话流式输出 总结 前言 本篇文章基于java和…

MYSQL笔记:简单的SQL操作和select查询

MYSQL笔记&#xff1a;简单的SQL操作和select查询 文章目录 MYSQL笔记&#xff1a;简单的SQL操作和select查询结构化查询语句SQL库操作表操作CRUD操作单表查询select 查询例子 分页查询与limitlimit 只是对结果条数有限制还是会提高查询效率&#xff1f; order bygroup by多表连…

【数据结构】常见八大排序算法(附动图)

一、前言 关于排序&#xff0c;有一些术语&#xff0c;例如算法的稳定/不稳定&#xff0c;内部排序和外部排序等&#xff0c;需要我们了解一下 稳定&#xff1a;当未排序时a在b前面且ab&#xff0c;排序后a仍然在b前面 不稳定&#xff1a;当未排序时a在b前面且ab&#xff0c;排…

微信小程序的图片色彩分析,解决画布网络图片报错问题,窃取网络图片的主色调

1、安装 Mini App Color Thief 包 包括下载包&#xff0c;简单使用都有&#xff0c;之前写了&#xff0c;这里就不写了 网址&#xff1a;微信小程序的图片色彩分析&#xff0c;窃取主色调&#xff0c;调色板-CSDN博客 2、 问题和解决方案 问题&#xff1a;由于我们的窃取图片的…

【SpringBoot】Validator组件+自定义约束注解实现手机号码校验和密码格式限制

&#x1f3e1;浩泽学编程&#xff1a;个人主页 &#x1f525; 推荐专栏&#xff1a;《深入浅出SpringBoot》《java对AI的调用开发》 《RabbitMQ》《Spring》《SpringMVC》 &#x1f6f8;学无止境&#xff0c;不骄不躁&#xff0c;知行合一 文章目录 前言一、Cons…

Linux防火墙开放

记录一次问题 写的网络服务无法通信 代码没问题&#xff0c;IP绑定、端口绑定没问题&#xff0c;就是无法进行通信&#xff0c;这里要分2步走。 服务器控制台开放 进入防火墙 添加规则&#xff0c;这里以开放udp的8899端口为例 这里在服务器后台就已经开放了&#xff0c;但此时…

Redis相关介绍

概念 Redis&#xff1a;非关系型数据库&#xff08;non-relational)&#xff0c;Mysql是关系型数据库(RDBMS) Redis是当今非常流行的基于KV结构的作为Cache使用的NoSQL数据库 为什么使用NoSQL 关系型 数据库无法应对每秒上万次 的读写请求 表中的存储记录 数量有限 无法简单…

9.【CPP】List (迭代器的模拟实现||list迭代器失效||list的模拟实现)

介绍 list是可以在常数范围内在任意位置进行插入和删除的序列式容器&#xff0c;并且该容器可以前后双向迭代。list的底层是双向链表结构&#xff0c;双向链表中每个元素存储在互不相关的独立节点中&#xff0c;在节点中通过指针指向其前一个元素和后一个元素。list与forward_…

QGIS打开shp地图

地图shp文件如何打开查看 提示 open sans字体没有安装 字体天下-提供各类字体的免费下载和在线预览服务 这里搜索open sans下载 但是 还是不显示 省份名称。

数据结构——lesson2线性表和顺序表

目录 前言 一、顺序表是什么&#xff1f; 1. 静态顺序表&#xff1a;使用定长数组存储元素 2. 动态顺序表&#xff1a;使用动态开辟的数组存储。 二、接口实现 1.动态顺序表存储 2.基本增删查改接口 (1)初始化顺序表 (2)顺序表摧毁 (3)检查空间 (4)顺序表打印 (5)顺…

【JVM篇】什么是jvm

文章目录 &#x1f354;什么是Java虚拟机&#x1f6f8;Java虚拟机有什么用&#x1f339;Java虚拟机的功能&#x1f388;Java虚拟机的组成 &#x1f354;什么是Java虚拟机 JVM指的是Java虚拟机&#xff0c;本质上是一个运行在计算机上的程序&#xff0c;可以运行 Java字节码文件…