数据结构和算法-树与二叉树的存储结构以及树和二叉树和森林的遍历

文章目录

  • 二叉树的存储结构
    • 二叉树的顺序存储
    • 二叉树的链式存储
    • 小结
  • 二叉树的先中后序遍历
    • 例题
    • 小结
  • 二叉树的层次遍历
    • 小结
  • 由遍历序列构造二叉树
    • 一个遍历序列即使给定了前中后序,也不能确定该二叉树的形态
    • 可以确定的序列组合
      • 前序+中序
      • 后序+中序
      • 层序+中序
    • 小结
    • 若前序,后序,层序两两组合能吗?
  • 树的存储结构
    • 总览
    • 树的逻辑结构
    • 顺序存储(双亲表示法)
    • 顺序+链式存储(孩子表示法)
    • 链式存储(孩子兄弟表示法)
    • 森林和二叉树的转换(孩子兄弟表示法)
    • 小结
  • 树和森林的遍历
    • 树的先根遍历
    • 树的后根遍历
    • 树的层次遍历
    • 森林的先序遍历
    • 森林的中序遍历
    • 小结

二叉树的存储结构

二叉树的顺序存储

在这里插入图片描述

i所在的层次可回顾上面二叉树的性质
在这里插入图片描述

通过计算出节点对应左孩子或右孩子的节点数然后判断是否在n个节点的范围内
在这里插入图片描述
当非完全二叉树时不适用了,如下图,节点与编号不对应了

在这里插入图片描述

所以,还是按照原来的对应图来存储。判断节点存不存在通过判断是否空的布尔值即可
在这里插入图片描述
弊端:会浪费部分节点
在这里插入图片描述

二叉树的链式存储

n个节点肯定会有n-1个指针域不为空,n+1个指针域为空。
n-1是有n-1条线连接两个节点,所以对应的指针域中也会有n-1个不为空的指针域
在这里插入图片描述
常用的操作
在这里插入图片描述
寻找某个节点的父节点时,需要遍历整个数,依次判断是否某个节点的子节点为对应的节点。
此时节点结构体中加上父节点指针可以避免遍历

在这里插入图片描述

小结

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

二叉树的先中后序遍历

在这里插入图片描述

感觉先中后序主要是根的遍历位置在前中后

在这里插入图片描述

有点递归的思想在里面
先找到根,然后开始按对应的序遍历,如果左右中存在不是叶子节点,则将该节点当作根节点继续按对应的序来遍历

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

例题

在这里插入图片描述

小结

在这里插入图片描述

二叉树的层次遍历

核心:队列非空则头节点出队并访问该节点且将其左,右孩子插入队尾(判断是否有,有的话则插入)
在这里插入图片描述
在这里插入图片描述

小结

在这里插入图片描述

由遍历序列构造二叉树

一个遍历序列即使给定了前中后序,也不能确定该二叉树的形态

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

可以确定的序列组合

在这里插入图片描述

前序+中序

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

后序+中序

都是先判断根结点
在这里插入图片描述
在这里插入图片描述

层序+中序

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

小结

核心:找根节点
在这里插入图片描述

若前序,后序,层序两两组合能吗?

在这里插入图片描述
无法确定,一定要有中序才行

树的存储结构

总览

在这里插入图片描述

树的逻辑结构

在这里插入图片描述

顺序存储(双亲表示法)

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

顺序+链式存储(孩子表示法)

存在指向孩子链表的指针的元素
在这里插入图片描述

链式存储(孩子兄弟表示法)

在这里插入图片描述
左孩子都是原本的孩子节点,右孩子都是原本的兄弟节点
所以B的右孩子的遍历下去的所有右孩子为原来A节点的孩子
在这里插入图片描述

森林和二叉树的转换(孩子兄弟表示法)

把兄弟节点都连起来,然后把兄弟节点与父节点的连线断了就成了
在这里插入图片描述

在这里插入图片描述

小结

在这里插入图片描述

树和森林的遍历

树的先根遍历

类似二叉树的先序遍历 根 左 右
对应的二叉树即对应的孩子兄弟法表示的树且该二叉树的先序遍历与原树的先根遍历相同
在这里插入图片描述

树的后根遍历

类似二叉树的后序遍历 左 右 根
对应的二叉树即对应的孩子兄弟法表示的树且该二叉树的中序遍历与原树的后根遍历相同
在这里插入图片描述

树的层次遍历

后根和先根遍历为深度优先遍历
层次遍历为广度优先遍历
在这里插入图片描述

森林的先序遍历

在这里插入图片描述
或把森林先转化为二叉树
在这里插入图片描述

森林的中序遍历

在这里插入图片描述
或转换为二叉树
在这里插入图片描述

小结

在这里插入图片描述

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

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

相关文章

算力基础设施领域国家标准发布

2023 年 11 月 27 日,国家标准 GB/T 43331-2023《互联网数据中心(IDC)技术和分级要求》正式发布。这一国家标准由中国信息通信研究院(简称“中国信通院”)联合多家企事业单位编制,旨在满足当前国家算力基础…

强化学习(一)——基本概念及DQN

1 基本概念 智能体 agent ,做动作的主体,(大模型中的AI agent) 环境 environment:与智能体交互的对象 状态 state ;当前所处状态,如围棋棋局 动作 action:执行的动作,…

C#——Delegate(委托)与Event(事件)

C#——Delegate(委托)与Event(事件) 前言一、Delegate(委托)1.是什么?2.怎么用?Example 1:无输入无返回值Example 2:有输入Example 3:有返回值Exa…

【C#】接口定义和使用知多少

给自己一个目标,然后坚持一段时间,总会有收获和感悟! 最近在封装和参考sdk时,看到一个不错的写法,并且打破自己对接口和实现类固定的观念,这也充分说明自己理解掌握的知识点还不够深。 目录 前言一、什么是…

Kubernetes(K8s)_16_CSI

Kubernetes(K8s)_16_CSI CSICSI实现CSI接口CSI插件 CSI CSI(Container Storage Interface): 实现容器存储的规范 本质: Dynamic Provisioning、Attach/Detach、Mount/Unmount等功能的抽象CSI功能通过3个gRPC暴露服务: IdentityServer、ControllerServe…

C++二维数组名到底代表个啥

题目先导 int a[3][4]; 则对数组元素a[i][j]正确的引用是*(*(ai)j)先翻译一下这个*(*(ai)j),即a后移i解引用,再后移j再解引用,这么看来a就应该是个二维数组,第一层存储行向量,一次解引用获得行向量的地址,…

LLM推理部署(三):一个强大的LLM生态系统GPT4All

GPT4All,这是一个开放源代码的软件生态系,它让每一个人都可以在常规硬件上训练并运行强大且个性化的大型语言模型(LLM)。Nomic AI是此开源生态系的守护者,他们致力于监控所有贡献,以确保质量、安全和可持续…

听GPT 讲Rust源代码--src/tools(6)

File: rust/src/tools/rust-analyzer/crates/ide/src/references.rs 在Rust源代码中,references.rs文件位于rust-analyzer工具的ide模块中,其作用是实现了用于搜索引用的功能。 该文件包含了多个重要的结构体、特质和枚举类型,我将逐一介绍它…

node.js-连接SQLserver数据库

1.在自己的项目JS文件夹中建文件:config.js、mssql.js和server.js以及api文件夹下的user.js 2.在config.js中封装数据库信息 let app {user: sa, //这里写你的数据库的用户名password: ,//这里写数据库的密码server: localhost,database: medicineSystem, // 数据…

OpenSSH 漏洞修复升级最新版本

Centos7系统ssh默认版本一般是OpenSSH7.4左右,低版本是有漏洞的而且是高危漏洞,在软件交付和安全扫描上是过不了关的,一般情况需要升级OpenSSH的最新版本 今天详细说下升级最新版本的处理过程(认真看会发现操作很简单&#xff0c…

Best Rational Approximation ——二分

许多微控制器没有浮点单元,但确实有一个(合理)快速整数除法单元。在这些情况下,使用有理值来近似浮点常数可能是值得的. 例如,355/113 3.1415929203539823008849557522124 是 π 3.14159265358979323846 一个很好的近…

【教学类-06-12】20231202 0-9数字分合-房屋样式(一)-下右空-升序-抽7题

作品展示-屋顶分合(0-9之间随机抽取7个不重复分合) 背景需求: 大班幼儿学分合题,通常区角里会设计一个“房屋分合”的样式 根据这种房屋样式,设计0-9内的升序分合题模板 素材准备 WORD样式 代码展示: 2-9…

PlantUML语法(全)及使用教程-用例图

目录 1. 用例图1.1、什么是用例图1.2、用例图的构成1.3、参与者1.4、用例1.4.1、用例基本概念1.4.2、用例的识别1.4.3、用例的要点1.4.3、用例的命名1.4.4、用例的粒度 1.5、应用示例1.5.1、用例1.5.2、角色1.5.3、改变角色的样式1.5.4、用例描述1.5.5、改变箭头方向1.5.6、使用…

AI创作ChatGPT源码+AI绘画(Midjourney绘画)+DALL-E3文生图+思维导图生成

一、AI创作系统 SparkAi创作系统是基于ChatGPT进行开发的Ai智能问答系统和Midjourney绘画系统,支持OpenAI-GPT全模型国内AI全模型。本期针对源码系统整体测试下来非常完美,可以说SparkAi是目前国内一款的ChatGPT对接OpenAI软件系统。那么如何搭建部署AI…

C语言——指针(四)

📝前言: 上篇文章C语言——指针(三)对指针和数组进行了讲解,今天主要更深入的讲解一下不同类型指针变量的特点: 1,字符指针变量 2,数组指针变量 3,函数指针变量 &#x1…

Spring boot命令执行 (CVE-2022-22947)漏洞复现和相关利用工具

Spring boot命令执行 (CVE-2022-22947)漏洞复现和相关利用工具 名称: spring 命令执行 (CVE-2022-22947) 描述: Spring Cloud Gateway是Spring中的一个API网关。其3.1.0及3.0.6版本(包含)以前存在一处SpEL表达式注入漏洞,当攻击者可以访问A…

2022年8月2日 Go生态洞察:Go 1.19版本发布深度解析

🌷🍁 博主猫头虎(🐅🐾)带您 Go to New World✨🍁 🦄 博客首页——🐅🐾猫头虎的博客🎐 🐳 《面试题大全专栏》 🦕 文章图文…

6-63.圆类的定义与使用(拷贝构造函数)

本题要求完成一个圆类的定义,设计适当的函数:包括构造函数、拷贝构造函数以及析构函数,从而可以通过测试程序输出样例 在这里给出一组输入。例如: 5 输出样例: 在这里给出相应的输出。例如: Constructo…

本项目基于Spring boot的AMQP模块,整合流行的开源消息队列中间件rabbitMQ,实现一个向rabbitMQ

在业务逻辑的异步处理,系统解耦,分布式通信以及控制高并发的场景下,消息队列有着广泛的应用。本项目基于Spring的AMQP模块,整合流行的开源消息队列中间件rabbitMQ,实现一个向rabbitMQ添加和读取消息的功能。并比较了两种模式&…

osg LOD节点动态调度

1、LOD节点 LOD(level of detail):是指根据物体模型的结点在显示环境中所处的位置和重要度,决定物体渲染的资源分配,降低非重要物体的面数和细节度,从而获得高效率的渲染运算。在OSG的场景结点组织结构中&…