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

news2024/11/25 1:06:37

数据结构与算法(一)-软件设计(十七)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的步骤删除找到的结点。

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

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

相关文章

LeetCode 21.剑指 Offer II 078. 合并两个有序链表 | C语言版

LeetCode 21. 合并两个有序链表 | C语言版LeetCode 21. 合并两个有序链表题目描述解题思路思路一&#xff1a;使用栈代码实现运行结果参考文章&#xff1a;思路二&#xff1a;减少遍历节点数代码实现运行结果参考文章&#xff1a;[]()LeetCode 剑指 Offer II 078. 合并排序链表…

《MySQL系列-InnoDB引擎25》表-InnoDB逻辑存储结构

InnoDB逻辑存储结构 从InnoDB存储引擎的逻辑存储结构看&#xff0c;所有数据都被逻辑地存放在一个空间中&#xff0c;称之为表空间(tablespace)。表空间又由段(segment)、区(extent)、页(page)组成。页在一些文档中有时也称为块(block)&#xff0c;InnoDB存储引擎的逻辑存储结构…

JVM系统优化实践(4):以支付系统为例

您好&#xff0c;我是湘王&#xff0c;这是我的CSDN博客&#xff0c;欢迎您来&#xff0c;欢迎您再来&#xff5e;前面说过&#xff0c;JVM会将堆内存划分为年轻代、老年代两个区域。年轻代会将创建和使用完之后马上就要回收的对象放在里面&#xff0c;而老年代则将创建之后需要…

python刷题

目录标题1、输出前三同学的名字-input().split()2、字典的使用3、DA12 牛客网不同语言使用人数4、DA16 用户常用语言有多少5、python变量1、输出前三同学的名字-input().split() s1 input().split() print(tuple(s1)[:3])2、字典的使用 注意点&#xff1a;1&#xff0c;对字典…

如何使用 FreeSql 无缝接替 EF Core ?

如何使用 FreeSql 无缝接替 EF Core&#xff0c;并实现数据表的 CRUD 操作项目说明DB & 数据表结构DB & 数据表创建数据表 User 实体模型创建使用 EF Core 实现 User 表新增用户信息添加 EF Core 相关的 nuget 包编写 EF Core 操作 User 表的 CRUD 代码FreeSql 使用 Db…

系统启动太慢,调优后我直呼Nice

问题背景最近在负责一个订单系统的业务研发&#xff0c;本来不是件困难的事。但是服务的启动时间很慢&#xff0c;慢的令人发指。单次启动的时间约在10多分钟左右&#xff0c;基本一次迭代、开发&#xff0c;大部分的时间都花在了启动项目上。忍无可忍的我&#xff0c;终于决定…

链路追踪——【Brave】第一遍小结

前言 微服务链路追踪系列博客&#xff0c;后续可能会涉及到Brave、Zipkin、Sleuth内容的梳理。 Brave 何为Brave&#xff1f; github地址&#xff1a;https://github.com/openzipkin/brave Brave是一个分布式追踪埋点库。 #mermaid-svg-riwF9nbu1AldDJ7P {font-family:"…

大数据Hadoop教程-学习笔记05【Apache Hive DML语句与函数使用】

视频教程&#xff1a;哔哩哔哩网站&#xff1a;黑马大数据Hadoop入门视频教程 总时长&#xff1a;14:22:04教程资源: https://pan.baidu.com/s/1WYgyI3KgbzKzFD639lA-_g 提取码: 6666【P001-P017】大数据Hadoop教程-学习笔记01【大数据导论与Linux基础】【17p】【P018-P037】大…

一文带你搞定线程池原理

1.使用线程池的意义何在&#xff1f;项目开发中&#xff0c;为了统一管理线程&#xff0c;并有效精准地进行排错&#xff0c;我们经常要求项目人员统一使用线程池去创建线程。因为我们是在受不了有些人动不动就去创建一个线程&#xff0c;使用的多了以后&#xff0c;一旦报错就…

Android从屏幕刷新到View的绘制(一)之 Window、WindowManager和WindowManagerService之间的关系

0. 相关分享 Android从屏幕刷新到View的绘制&#xff08;一&#xff09;之 Window、WindowManager和WindowManagerService之间的关系 Android从屏幕刷新到View的绘制&#xff08;二&#xff09;之Choreographer、Vsync与屏幕刷新 1. 相关类 WindowManagerService&#xff0c…

Linux安装Redis步骤

1 下载安装包并解压 官网&#xff1a;https://download.redis.io 下载安装包&#xff1a; wget https://download.redis.io/redis-stable.tar.gz 解压 tar -zxvf redis-stable.tar.gz* 2 安装 安装 cd redis-stable make install PREFIX/opt/install/redis6 设置环境变量 vi …

Python学习-----项目设计1.0(设计思维和ATM环境搭建)

目录 前言&#xff1a; 项目开发流程 MVC设计模式 什么是MVC设计模式&#xff1f; ATM项目要求 ATM项目的环境搭建 前言&#xff1a; 我个人学习Python大概也有一个月了&#xff0c;在这一个月中我发布了许多关于Python的文章&#xff0c;建立了一个Python学习起步的专栏…

企业级信息系统开发学习1.3——利用注解配置取代Spring配置文件

文章目录一、利用注解配置类取代Spring配置文件&#xff08;一&#xff09;打开项目&#xff08;二&#xff09;创建新包&#xff08;三&#xff09;拷贝类与接口&#xff08;四&#xff09;创建注解配置类&#xff08;五&#xff09;创建测试类&#xff08;六&#xff09;运行…

史上最经典垃圾回收器(CMS,G1)详解、适用场景及特点、使用命令

文章目录垃圾收集器介绍总结各个垃圾收集器之间的关系垃圾收集器使用命令及默认值详解各个垃圾收集器SerialParNewParallel ScavengeSerial OldParallel OldCMS(Concurrent Mark Sweep)G1(Garbage First)适用场景及推荐垃圾收集器介绍总结 垃圾收集器可以帮助我们进行具体的垃…

HDFS优化

单节点多块磁盘数据均衡 生成HDFS块均衡计划 hdfs diskbalancer -plan node1 执行均衡计划,node1.plan.json均衡计划文件 hdfs diskbalancer -execute node1.plan.json 查看当前均衡任务的执行情况 hdfs diskbalancer -query node1 取消均衡任务hdfs diskbalancer -cancel nod…

(三十九)undo log版本链是个什么东西?

今天我们正式开始切入讲解MySQL中多个事务并发执行时的隔离到底是怎么做的&#xff0c;因为我们知道默认是骚气的RR隔离级别&#xff0c;也就是说脏写、脏读、不可重复读、幻读&#xff0c;都不会发生&#xff0c;每个事务执行的时候&#xff0c;跟别的事务压根儿就没关系&…

移动web基础

初始缩小&#xff1a;布局视口大于视觉视口 初始放大&#xff1a;布局视口小于视觉视口 布局视口等于视觉视口&#xff08;这种动作行为叫做理想视口&#xff09; <meta name"viewport" content"width375" /> <meta name"viewport"…

云原生|kubernetes|网络插件flannel二进制部署和calico的yaml清单部署总结版

前言&#xff1a; 前面写了一些关于calico的文章&#xff0c;但感觉好像是浅尝辄止&#xff0c;分散在了几篇文章内&#xff0c;并且很多地方还是没有说的太清楚云原生|kubernetes|kubernetes的网络插件calico和flannel安装以及切换_calico换flannel_晚风_END的博客-CSDN博客 …

在C#中使用信号量解决多线程访问共享资源的冲突问题

目前在我写的233篇原创文章中&#xff0c;有两篇是粉丝可见的&#xff0c;其中《C#线程的参数传递、获取线程返回值以及处理多线程冲突》这篇文章有179个粉丝关注&#xff0c;看到不断有人关注这篇文章&#xff0c;这表明学习C#的人还是挺多的&#xff0c;感觉文章内容不够厚实…

泛型<E>

泛型 案例引出泛型 按要求写出代码&#xff1a; 在ArrayList中添加3个Dog对象&#xff0c;Dog对象有name和age两个属性&#xff0c;且输出name和age public class test1 {public static void main(String[] args) {ArrayList list new ArrayList();list.add(new Dog(10,&quo…