二叉树、队列、栈、广义表(二)数据结构与算法(十八)

2023-10-27

数据结构与算法(一)-软件设计(十七)icon-default.png?t=N176https://blog.csdn.net/ke1ying/article/details/129220378

  • 线性表-队列与栈

队列:先进先出。

栈:先进后出。

循环队列:队投和队尾连接起来。

队空的条件:Head = tail。

队满的条件:(tail+1)%size =head。(因为为了区分队空 和 队满,留一个位置不让存储)

题目:元素按照a、b、c的次序进入栈,请尝试写出可能出栈的序列

第一种情况:a进,a出,b进,b出,c进c出,所以abc。

第二种情况:a进,b进,b出,a出,c进,c出,所以bac。

第三种情况:a进,b进,c进,c出,b出,a出,所以cba。

  • 广义表

广义表是n个表元素组成的有限序列,是线性表的推广。

通常用递归的形式进行标记,记作LS=(a0,a1....aN)。

例子:LS1 = (a,(b,c),(d,e))

注:LS1是表明表明,a0,a1等是他的表元素,它可以是子表,也可以是数据元素(原子)。

n是广义表的长度,LS1的长度是3:a,(b,c),(d,e)这三个

N=0则表示是空的广义表。

深度则就是括号的嵌套层数,LS1嵌套两层所以是2。

Head(LS1)=a。

Tail(LS1)=((b,c),(d,e))。

由此可见,表头是第一个元素,表尾是除了第一个元素的其他所有元素

题目:有如上的广义表LS1,如何取出b元素?

  1. 取表尾得到((b,c),(d,e))
  2. 取表头得到(b,c)
  3. 取表头得到(b)

三、树与二叉树

树的基本概念

节点的度?

是某个节点的孩子节点个数,以节点1为例,有2和3两个孩子节点,所以1的节点度是2。

7号节点是叶子节点,则是0度。

树的度?

所有结点度数,最高的那个度就是 树的度,图上最高的度是2。

叶子结点?

4/5/7/8

分支结点?

有相应的分支。2/3/6

内部结点?

内部结点也是2/3/6

父结点?子节点?

对于2和4而言,2就是父结点,子节点是4

兄弟节点?

4/5,同一个父底下。

层次?

图上树是4层。

二叉树分为 满二叉树、完全二叉树、非完全二叉树。

他的重要特性有哪些?

  1. 在二叉树的第i层上最多有2的i-1个结点 (i>=1)。
  2. 深度为k的二叉树,最多有(2的k次方) - 1个结点(k>=1)。
  3. 对于任意一个二叉树,如果其叶子节点树为 x,度为2的节点数为 y,则x = y+1。
  4. 如果一颗树是完全二叉树,则会有如下定义
  1. 如果i=1,则结点i无父结点。如果i>1,则父结点是i/2。

(例子:6结点除以2他的父结点所以是3)

  1. 如果2i>n,则结点i为叶子结点,无左子结点,否则,其左子结点是结点2i。

(i=4的时候,2i = 8> n = 7,所以i是叶子节点,i=4无左子结点。

I=3的时候,2i = 6 < n =7,所以3的左子节点就是6)

  1. 如果2i+1>n,则结点i无右子叶点,否则,其右子结点是2i+1.

(当i=4时候,2i+1 = 9>n = 7,所以4无右子叶点,

当i=2时候,2i+1=5<7,所以2的右子结点时 5)

四、二叉树的遍历

前序遍历、中序遍历、后序遍历、层次遍历。

层次遍历:12345678

前序遍历:根结点,左子树,右子树

1   24578  36

(因为左子树结点里根是2,所以从2开始。)

中序遍历:左子树,根,右子树

42785 1 36

(为什么是42785呢?

因为中序是从左子树开始访问,

第一步:2为根的左子树是4,所以42

第二步:5为根的左子树是78,所以785)

后序遍历

48752 63 1

区别就是前序每次统计以根结点为主

中序和后续每次统计以左结点为主

反向构造二叉树一般是给出前序中序一起,让反向推导出二叉树是什么样子。

树转二叉树孩子结点-左子树结点;兄弟结点-右孩子节点

  • 查找二叉树(排序二叉树)

左子树小于根结点,右子树大于根结点的树,就是查找二叉树。

插入结点:

  1. 若该结点已存在,则不再插入。
  2. 若树为空,则该结点时根结点。
  3. 若树不空,则与根结点比较,小于放在左子树,大于放右子树。

删除结点:

  1. 若是叶子结点,直接删除。
  2. 若删除结点下有一个结点,则把下面的结点直接移动上来。
  3. 若删除的结点有两个子结点,则在其左子树,找到最大的结点移动上来。然后按照2的步骤删除找到的结点。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

二叉树、队列、栈、广义表(二)数据结构与算法(十八) 的相关文章

随机推荐

  • 算法(1) MST - 最小生成树

    最小生成树 算法 概念 生成树 如果连通网G的一个子图是一棵包含G的所有顶点的树 则该子图称为G的生成树 最小生成树 在连通网G的所有生成树中 所有边的代价和最小的生成树 称为最小生成树 Kruskal 算法 又称为加边法 将边排序后从小到
  • 清除css的display属性

    今天在项目中遇到了一个要清除display属性的问题 整了半天才搞好 给大家分享一下 var b obj attr id var a document getElementsByName b for var i 0 i
  • Spring Cloud Ribbon的使用详解

    目录 一 概述 1 Ribbon是什么 2 Ribbon能干什么 3 Ribbon现状 4 未来替代方案 5 架构说明 二 RestTemplate 用法详解 三 Ribbon核心组件IRule 四 实战项目 1 回顾之前的项目 2 Rib
  • win7右键打开方式添加应用程序无法设置

    针对某些绿色软件包 当我们移动软件包的位置时 再次设置默认打开方式会出现无法设置的情况 如下图 选择要设置的文件 gt 右击 gt 打开方式 gt 选择默认程序 浏览选择默认打开方式的应用 点击打开设置默认程序 结果是打开方式中并没有Not
  • 【点击按钮 复制文本】实现点击按钮复制文本内容(vue和uniapp两种方式实现)

    一 Vue使用clipboard实现点击按钮复制文本内容 1 安装clipboard js npm install clipboard save 2 具体代码 div class copybox 复制 div
  • Redis高并发缓存架构实战

    示例代码 Service public class ProductService Autowired private ProductDao productDao Autowired private RedisUtil redisUtil A
  • 拉勾教育

    开篇词 开篇词 Java 性能优化 是进阶高级架构师的炼金石 你好 我是李国 作为 Java 性能优化与面试 21 讲 这个课程的作者 我先来简单介绍下自己 我曾任京东金融 陌陌科技高级架构师 工作期间 我接触的都是比较底层的中间件和操作系
  • Redis学习笔记7:Redis持久化-RDB、AOF

    一 什么是RDB 1 Redis DataBase 在指定的时间间隔内将内存中的数据集快照写入磁盘 也就是行话讲的Snapshot快照 它恢复时是将快照文件直接读到内存里 Redis会单独创建 fork 一个子进程来进行持久化 会先将数据写
  • 软件测试经验分享

    软件测试 一个熟悉又略显陌生的词汇 不同人对软件测试有不同的理解 如果把软件比作一片辽阔的区域 地形复杂 设置有许多个目的地 每个目的地都有多条道路可以到达 每条道路上都可能埋藏了威力不一的地雷 测试人员的职责就是在用户进入这片区域之前 试
  • BroadcastChannel:weex跨页面通信

    场景如下 一个列表页面用于展示所有未完成的作业 点击列表的某一项 会跳转到该项作业的详细信息界面 可以在这里将作业标记为已完成 一旦标记后 列表中就不应该再存在此作业了 在这里 列表相当于一个主页面 详细信息界面是子页面 主界面浏览到第10
  • 如何使用Java反射机制获取类的所有构造函数呢?

    转自 如何使用Java反射机制获取类的所有构造函数呢 下文讲述使用Java反射获取一个类的所有构造方法分享 如下所示 实现思路 1 forName 获取指定的Class对象 2 getConstructors 可返回一个构造函数对象数组 例
  • 自定义maven插件 Hello, mojo.

    文章目录 pom xml GreetingMojo java 运行 install install 报错 配置代理 pom xml 中添加配置 参考文档 https maven apache org guides plugin guide
  • CSS3 transition 属性过渡效果 详解

    CSS3 transition 允许 CSS 元素的属性值在一定的时间区间内平滑地过渡 我们可以在不使用 Flash 动画或 JavaScript 的情况下 在元素从一种样式变换为另一种样式时为元素添加效果 这种效果可以在鼠标单击 获得焦点
  • mmcv与cuda,pytorch版本匹配要求

    mmcv与cuda pytorch版本兼容要求 见mmcv官方文档 https mmcv readthedocs io zh CN latest get started installation html pip 安装部分 目前网页上默认最
  • 【SQL注入13】referer注入基础及实践(基于BurpSuite工具和Sqli-labs-less19靶机平台)

    目录 1 概述 2 实验简介 2 1 实验平台 2 2 实验目标 3 实验过程 3 1 前戏 3 2 判断注入点及注入类型 3 3 获取库名表名字段名字段内容 3 4 实验结果 4 总结 1 概述 Referer 是 HTTP 请求头的一部
  • 小程序能当成 App 吗?FinCip:能

    如果早些年提问 把小程序当成 App 使用 本身就是一件天方夜谭的问题 好像业务人员不再关注研发工程师是否能够按期交付代码 而是想自己在屏幕上点击几下光标 编程软件就能快速生成无数个页面和应用 时光荏苒一去不返 如今的低代码产品早都把 拖拉
  • Google 的开源技术protobuf 简介与例子

    今天来介绍一下 Protocol Buffers 以下简称protobuf 这个玩意儿 本来俺在构思 生产者 消费者模式 系列的下一个帖子 关于生产者和消费者之间的数据传输格式 由于里面扯到了protobuf 想想干脆单独开一个帖子算了 p
  • 登录注册代码

    服务器的建立 服务器中的代码 浏览器代码 MyHttpManager代码 Main代码 注册界面的代码 文本文档流程图 服务器的建立 1 右键在web里面找到Dynamic web project 建立一个服务器 在Java Resourc
  • Error: JAVA_HOME is not set and java could not be found in PATH.

    CSDN话题挑战赛第2期 参赛话题 学习笔记 目录 前言 问题 解决办法 测试 启动成功 查看状态 关闭服务 前言 因为zookeeper服务器多 每一次启动 关闭和查看状态都很麻烦 所以通过shell脚本启动zookeeper集群 写完的
  • 二叉树、队列、栈、广义表(二)数据结构与算法(十八)

    数据结构与算法 一 软件设计 十七 https blog csdn net ke1ying article details 129220378 线性表 队列与栈 队列 先进先出 栈 先进后出 循环队列 队投和队尾连接起来 队空的条件 Hea