当前位置: 首页 > article >正文

数据结构——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.kler.cn/news/233812.html

相关文章:

  • 模运算的变换公式
  • QListWidget组件功能
  • 被设计的面试题与设计性的回答
  • 配置VMware实现从服务器到虚拟机的一键启动脚本
  • 数据结构——5.3 二叉树的遍历和线索二叉树
  • 游戏竞赛中的时间压力与情绪管理:一场关于挑战、紧迫感与心态的深度探讨
  • 255.【华为OD机试真题】最小矩阵宽度(滑动窗口算法-JavaPythonC++JS实现)
  • 【微机原理与单片机接口技术】MCS-51单片机的引脚功能介绍
  • LabVIEW工业监控系统
  • 【Linux】构建模块
  • 2、ChatGPT 在数据科学中的应用
  • Istio1.6官方文档中文版
  • C++2024寒假J312实战班2.5
  • 正点原子--STM32通用定时器学习笔记(2)
  • 速盾:海外服务器用了cdn还是卡怎么办
  • 【CSS】什么是BFC?BFC有什么作用?
  • Android 11 webview webrtc无法使用问题
  • cool 框架 node 后端封装三方Api post请求函数
  • NLP_Bag-Of-Words(词袋模型)
  • 如何进行游戏服务器的负载均衡和扩展性设计?
  • VUE学习——事件参数
  • 每天一个数据分析题(一百五十六)
  • moduleID的使用
  • 【学习笔记】【内核】offsetof 的用法
  • 算法学习——LeetCode力扣二叉树篇1
  • c# 时间帮助类
  • 2.6:冒泡、简选、直插、快排,递归,宏
  • VMware虚拟机安装openEuler系统(一)(2024)
  • Idea里自定义封装数据警告解决 Spring Boot Configuration Annotation Processor not configured
  • Qt QML学习(一):Qt Quick 与 QML 简介