数据结构——5.4 树、森林

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.mzph.cn/news/677548.shtml

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

相关文章

计算机网络——04接入网和物理媒体

接入网和物理媒体 接入网络和物理媒体 怎样将端系统和边缘路由器连接? 住宅接入网络单位接入网络(学校、公司)无线接入网络 住宅接入:modem 将上网数据调制加载到音频信号上,在电话线上传输,在局端将其…

【C语言|数据结构】数据结构顺序表

目录 一、数据结构 1.1概念 1.2总结 1.3为什么需要数据结构? 二、顺序表 1.顺序表的概念及结构 1.1线性表 2.顺序表分类 2.1顺序表和数组的区别 2.2顺序表的分类 2.2.1静态顺序表 2.2.1.1概念 2.2.1.2缺陷 2.2.2动态顺序表 三、动态顺序表的实现 3.1新…

如何部署一个高可用的 Linux 集群?

部署一个高可用的 Linux 集群需要经过多个步骤和考虑因素。以下是一个简要的指南,帮助您了解如何部署一个高可用的 Linux 集群: 确定需求和目标:在开始部署之前,您需要明确高可用性的定义和目标。对于一些组织而言,高…

寒假提升(6)[杂烩典型题]

天可补,海可填,南山可移。 日月既往,不可复追。 ——曾国藩 知识点 1、关于整形提升2、大小端3、使用函数时参数的影响3、1、计算大小(有函数存在)3、2、计算大小(无函数存在)3、3、形参和实参 4、关于赋值 1、关于整形提升 char a101; int …

算法竞赛例题讲解:平方差 第十四届蓝桥杯大赛软件赛省赛 C/C++ 大学 A 组 C平方差

题目描述 给定 L L L和 R R R,问 L ≤ x ≤ R L\leq x \leq R L≤x≤R中有多少个数 x x x满足存在整数 y y y, z z z使得 x y 2 − z 2 x y^{2} - z^{2} xy2−z2。 输入格式 输入一行包含两个整数 L L L, R R R,用一个空格分隔。 输出格式 输出一…

计算机设计大赛 深度学习 机器视觉 车位识别车道线检测 - python opencv

0 前言 🔥 优质竞赛项目系列,今天要分享的是 🚩 深度学习 机器视觉 车位识别车道线检测 该项目较为新颖,适合作为竞赛课题方向,学长非常推荐! 🥇学长这里给一个题目综合评分(每项满分5分) …

刷题13 数组

989. 数组形式的整数加法 整数的 数组形式 num 是按照从左到右的顺序表示其数字的数组。例如,对于 num 1321 ,数组形式是 [1,3,2,1] 。 给定 num ,整数的 数组形式 ,和整数 k ,返回 整数 num k 的 数组形式 。 输入…

12118 - Inspector‘s Dilemma (UVA)

题目链接如下: Online Judge 脑雾严重,这道题一开始我想的方向有问题.....后来看了别人的题解才写出来的..... 用的是欧拉路径的充要条件;以及数连通块。需要加的高速路数目 连通块个数 - 1 sum(每个连通块中连成欧拉路径需要…

EMC学习笔记(二十三)降低EMI的PCB设计指南(三)

双层板电源分配 1.单点与多点分布2.星型分布3.创建网格平面4.旁路和磁珠5.将噪声保持在芯片附近 tips:资料主要来自网络,仅供学习使用。 1.单点与多点分布 在一个真正的单点配电系统中,每个有源元件都有自己独立的电源和地,这些…

Hibernate JPA-@PreUpdate 和@PrePersist、@MappedSuperclass应用场景

文章目录 PrePersist注解 和 PreUpdate注解PreUpdatePrePersist 应用场景给一张表加上create_time,update_time这样的字段,想实现自动保存,更新这两个字段 MappedSuperclassInheritanceSINGLE_TABLE(将所有父类和子类集合在一张表)TABLE_PER_…

【React】如何使antd禁用状态的表单输入组件响应点击事件?

最近遇到一个需求&#xff0c;需要在<Input.textarea>组件中&#xff0c;设置属性disabled为true&#xff0c;使textarea响应点击事件&#xff0c;但直接绑定onClick并不会在禁用状态下被响应。 解决方法1 之后尝试了很多方法&#xff0c;比如设置csspointer-events:no…

【Make编译控制 07】CMake常用命令

目录 一、变量相关命令 1. 定义变量 2. 设置C标准 3. 设置输出路径 二、文件相关命令 1. file 命令 2. aux_source_directory 命令 2. include_directories 命令 三、字符串相关命令 1. 字符串输出 2. 字符串拼接 3. 字符串移除 前情提示&#xff1a;【Make编译控制 …

【Dubbo源码二:Dubbo服务导出】

入口 Dubbo服务导出的入口&#xff1a;服务导出是在DubboBootstrapApplicationListener在监听到ApplicationContextEvent的ContextRefreshedEvent事件后&#xff0c;会触发dubboBootstrap.start(), 在这个方法中最后会导出Dubbo服务 DubboBootstrapApplicationListener Dub…

Python装饰器详解:实例分析与使用场景

在Python中,装饰器是一种强大的语法特性,允许在不修改原始代码的情况下,动态地修改或增强函数的行为。本文将通过两个实际的例子,分别介绍了计时装饰器和缓存装饰器,并深入探讨了它们的实现原理和使用场景。 1. 计时装饰器 import timedef timing_decorator(func):def w…

无人机飞控算法原理基础研究,多旋翼无人机的飞行控制算法理论详解,无人机飞控软件架构设计

多旋翼无人机的飞行控制算法主要涉及到自动控制器、捷联式惯性导航系统、卡尔曼滤波算法和飞行控制PID算法等部分。 自动控制器是无人机飞行控制的核心部分&#xff0c;它负责接收来自无人机传感器和其他系统的信息&#xff0c;并根据预设的算法和逻辑&#xff0c;对无人机的姿…

【基础】比较器 - 振荡来自何处?

比较器是一个简单的概念-在输入端对两个电压进行比较。输出为高或者低。因此&#xff0c;在转换的过程中为什么存在振荡。 当转换电平缓慢改变的时候&#xff0c;这个现象经常会发生。常常是由于输入信号存在噪声&#xff0c;因此在转换电平附近的轻微波动会引起输出端的振荡。…

KMP算法与前缀函数

KMP算法与前缀函数 说明 本文参考了 OI Wiki。 首先来明确几个概念&#xff1a; 后缀&#xff1a;后缀是从父串某个位置i开始到末尾结束的一个特殊字符串。真后缀&#xff1a;不为父串本身的后缀字符串。前缀&#xff1a;从父串开头到某个位置i结束的一个特殊字符串。真前缀…

in r, 找出所有重复的元素,包括第一个 R语言|如何筛选所有的重复行(包括第一行重复在内)

library(dplyr) data <- metadata %>%group_by(type) %>% # 根据你要筛选的列进行分组filter(duplicated(type)|n()!1) %>% # 将该列中有重复的行挑选出来ungroup() 方法二 # 示例向量 x <- c(1, 2, 3, 2, 4, 5, 5, 6)# 找出所有重复的元素&#xff08;包括第一…

基于深度学习算法的轴承故障自主分类

1. 要求 轴承有3种故障&#xff1a;外圈故障&#xff0c;内圈故障&#xff0c;滚珠故障&#xff0c;外加正常的工作状态。如表1所示&#xff0c;结合轴承的3种直径&#xff08;直径1,直径2,直径3&#xff09;&#xff0c;轴承的工作状态有10类&#xff1a; 表1 轴承故障类别 外…

单片机学习路线(简单介绍)

学习单片机对于电子爱好者和未来的嵌入式系统工程师来说是一段激动人心的旅程。单片机因其强大的功能、灵活性以及在各种智能设备中的广泛应用&#xff0c;成为了电子和计算机科学领域一个不可或缺的组成部分。如果你对如何开始这段旅程感到好奇&#xff0c;那么你来对地方了。…