- 博客(32)
- 收藏
- 关注
原创 判断二叉树是否对称、道路规划、求完全二叉树度为1和0结点的个数--c++【做题记录】
n个村庄之间有m条有权无向道路,使得每个村庄都能到达任意村庄,现让你重新进行道路规划,在保证每个村庄都能到达任意村庄的情况下,删除一定数量的道路,使得删除的道路权值和最大。第2至m+1行,每行三个数u, v, w,表示村庄u和村庄v之间有一条权值为w的无向道路。【问题描述】用前序字符串建立一个字符型二叉树,判断这个二叉树是否对称。【输出形式】对称输出true,不对称输出false。【样例输入】123##4##24##3##【样例输入】123##4##23##4##
2024-06-26 12:41:17 319
原创 教学计划(拓扑排序)c++【做题记录】
要学习课程 0,你应该先完成课程 1 和课程 2。并且学习课程1之前,你需要先完成课程0。例如,想要学习课程 0 ,你需要先完成课程 1 ,我们用一个匹配来表示他们,如: 0,1。第二行输出:是否允许先安排学习课程c1在安排学习c2(true/false),如果第一行为false,则不输出第二行。第二行开始,输入M行,输入课程关系(若要学习课程1,需要先完成课程2)输入:课程1,课程2。教学计划允许先安排学习课程3,再安排学习课程0,因此第二行输出true。第一行,输入:课程数N,课程之间的关系数M。
2024-06-22 23:48:35 222
原创 从下至上按层遍历二叉树--c++【做题记录】
按层遍历二叉树输出遍历序列。访问次序是从下到上,每层的访问顺序是从左到右。输出二叉树按照从下至上,从左到右访问的遍历序列。输入用前序遍历序列表示的二叉树。给定一棵二叉树,要求从。
2024-06-22 20:59:22 342
原创 拓扑排序、关键路径(AOV、AOE网)
在一个表示工程的带权有向图中,用顶点表示事件,用有向边表示活动,边上的权值表示活动的持续时间,称这样的有向图叫做边表示活动的网,简称AOE网。第一行输入顶点个数和边的个数 后续行输入边依附的两个顶点的数字编号(测试用例的编号都从0开始) 输出拓扑排序的结果。⑵ 只有在进入某顶点的各活动都结束,该顶点所代表的事件才能发生。在AOE网中,从始点到终点具有最大路径长度(该路径上的各个活动所持续的时间之和)的路径称为关键路径。遍历所有的出边,如果ve[前驱/起点]+边的权值>ve[后继/终点],更新ve的值。
2024-06-15 11:13:02 735
原创 除留取余法构造散列表--c++【做题记录】
若已知整个哈希表的最大长度 m,可以取一个不大于 m 的数 p,然后对该关键字 key 做取余运算,即:H(key)= key % p。在此方法中,对于 p 的取值非常重要,由经验得知 p 可以为不大于 m 的质数或者不包含小于 20 的质因数的合数。H(key)=(H(key)+ d)MOD m(其中 m 为哈希表的表长,d 为一个增量) 采用线性探测法,当遇到冲突时,从发生冲突位置起,每次 +1,向右探测,直到有空闲的位置为止,即d的值为1,2,3,4...。第四行打印哈希表,表中为空的位置显示 ^
2024-06-08 16:01:00 288
原创 判断是否是平衡二叉树--c++【做题记录】
bool isBalance(BiNode *bt, int &height) //注意,将height用引用传进来,被调函数可以向主调函数传递计算出来的高度值。计算以bt为根的这棵树的高度。是root的左子树、右子树中的较高者加上root本身这个结点(即加1)输入一组数据,按顺序构造出一个二叉排序树,不要平衡化,直接插入数据。判断树是否是平衡二叉树。假设左子树平衡,右子树平衡,而且左右子树高度差小于等于1,则平衡。若为空,高度就为0,平衡。左递归判断左子树平衡吗?右递归判断右子树平衡吗?
2024-06-08 15:45:31 309
原创 将二叉排序树转换成双向链表--c++【做题记录】
编写程序在不增加结点的情况下,将二叉排序树转换成有序双向链表(如下图)。链表创建结束后,按照从前往后的顺序输出链表中结点的内容。按照从后往前的顺序输出链表中的结点内容。第一行输入数字n,第二行输入n个整数。多加了个逆序输出链表内容……
2024-06-08 15:26:15 475
原创 二叉排序树--c++
【相关知识】二叉排序树(也称二叉查找树):或者是一棵空的二叉树,或者是具有下列性质的二叉树:⑴ 若它的左子树不空,则左子树上所有结点的值均小于根结点的值;⑵ 若它的右子树不空,则右子树上所有结点的值均大于根结点的值;⑶ 它的左右子树也都是二叉排序树。
2024-06-08 15:15:59 554
原创 求二叉树第k层结点的个数--c++【做题记录】
【提示】 上述例子中第二层只有b,c两个节点,因此输出第2层结点个数为2。编程时可以利用层序遍历,当出队找到第一个符合k层的数据时,开始统计本层节点个数。第一行输入扩展二叉树树的前序遍历序列。求出二叉树的第K层结点个数。第二行输入k值,(k>0)。输出树的第K层结点个数。
2024-06-06 19:33:23 268
原创 二叉树的镜像--c++【做题记录】
求这课二叉树的镜像,并输出其前序遍历序列。镜像后二叉树的前序遍历序列是:acedb。给定扩展二叉树的前序序列,构建二叉树。输出镜像二叉树的前序遍历序列。输入扩展二叉树的前序序列。
2024-06-06 19:26:01 350
原创 农场--Kruskal应用--c++
农场里有一些奶牛,作为食物的草料不够了。该地区有N (2 <= N <= 2,000) 个农场,农场名称用数字N标识,农场之间的道路是双向的,一共有M (1 <= M <= 10,000)条道路,单条长度不超过1,000,000,000里。所有农场都有通路,连接到农场主的农场。农场主的农场是1号农场,他从自己的农场出发,去所有的农场借草料。农场主需要在路上携带足够的水,假设马跑完一里路需要1盎司的水,在任意一个农场都可以补充水。下面多行,每一行表示起点农场编号 终点农场编号 路径长度。
2024-05-24 17:38:13 354 1
原创 Dijkstra算法求最短路径 c++
求单源最短路径算法是由狄克斯特拉(Dijkstra)提出的,称为狄克斯特拉算法,是一个按路径长度递增的顺序逐步产生最短路径的方法。请注意这些公路是单向的。求带权有向图最短路径问题分为两种情况:求从一个顶点到其他各顶点的最短路径,称之为。的最短路径,实际上为最短路径上的前一个顶点。从A到C顶点的最短路径为:A->D->C。从B到E顶点的最短路径为:B->C->E。到其余各顶点的最短路径的求解过程。从A到B顶点的最短路径为:A->B。从A到D顶点的最短路径为:A->D。从A到E顶点的最短路径为:A->E。
2024-05-24 16:14:36 1777
原创 最小生成树【做题记录】c++(Prim,Kruskal)
假设遍历到一条由顶点 A 和 B 构成的边,而顶点 A 和顶点 B 标记不同,此时不仅需要将顶点 A 的标记更新为顶点 B 的标记,还需要更改所有和顶点 A 标记相同的顶点的标记,全部改为顶点 B 的标记。若被考察边的两个顶点属于同一个连通分量,则舍去此边,以免造成回路,如此下去,当T中的连通分量个数为1时,此连通分量便为G的一棵最小生成树。设无向连通网为G=(V, E),令G的最小生成树为T=(U, TE),其初态为U=V,TE={ },然后,按照边的权值由小到大的顺序,考察G的边集E中的各条边。
2024-05-20 22:04:44 2051
原创 Floyd算法求最短路径 、娱乐中心选址c++
对上图创建distance和path两个二维数组,记录两个顶点之间的距离和路径,在算法进行中,对两个二维数组进行更新,最后得到任意两个顶点之间的最短路径。 的最短路径为:0435 最短路径长度为:60。 的最短路径为:043 最短路径长度为:50。 的最短路径为:235 最短路径长度为:60。 的最短路径为:435 最短路径长度为:30。 的最短路径为:bca 最短路径长度为:5。 的最短路径为:23 最短路径长度为:50。
2024-05-19 19:46:09 1969 1
原创 图的遍历【做题记录】c++
【输入输出】 第一行输入顶点的个数n,第二行输入n个顶点的值,为字符型。第三行输入边的个数m,下面m行输入边的起点下标、终点下标和权值(int型)。最后一行输入遍历的起始点,用点的值表示。从指定的起始点出发无法访问到的顶点不用进行遍历。【输入输出】 第一行输入顶点的个数n,第二行输入n个顶点的值。第三行输入边的个数m,下面m行输入边的起点和终点坐标。最后一行输入遍历的起始点的值。从指定的顶点出发无法访问到的顶点不用遍历。采用头插法插入链表。
2024-05-11 23:11:35 469 2
原创 图--图的存储【做题记录】c++
输入i、j两个顶点的值(不是下标),判断两个顶点i到j是否有边相连?输入i、j两个顶点的值(不是下标),判断两个顶点i到j是否有边相连?输入任意一个顶点,输出它的度?第二行输出图的边的信息,边按照起点下标升序排列,边的起点坐标小于终点坐标,输出一次即可。使用邻接表存储一个有向网,输出图的基本信息。adjvex:邻接点域,边的终点在顶点表中的下标。完成一个无向图的类,实现无向图的的创建和输出。下面多行输入每条边的起点下标,终点下标和权值。第二行输入n个顶点的信息,为字符型。第二行输出图的边,输出权值。
2024-05-10 21:04:13 617 1
原创 哈夫曼树与哈夫曼编码【做题记录】
正常思路是遍历整个哈夫曼树,对于树中的每个叶子结点,计算其权重与从根结点到该叶子结点的路径长度的乘积。然后将所有叶子结点的这个乘积相加,得到整棵树的WPL。【哈夫曼编码】 是在哈夫曼树的基础上构建的,这种编码方式最大的优点就是用最少的字符包含最多的信息内容。用到哪个字符时,从哈夫曼树的根结点开始,依次写出经过结点的标记,最终得到的就是该结点的哈夫曼编码。根据发送信息的内容,通过统计文本中相同字符的个数作为每个字符的权值,建立哈夫曼树。哈夫曼树的创建和其编码的函数代码和上面一样,以下是计算WPL的函数。
2024-05-10 20:25:15 968 1
原创 二叉树研讨题(线索二叉树、字符串构建二叉树、复制二叉树、二叉树判同)
建立线索链表,实质上就是将二叉链表中的空指针改为指向前驱或后继的线索,而前驱或后继的信息只有在遍历该二叉树时才能得到。要求创建名为source的二叉树对象,输入扩展二叉树的前序序列,构建一棵二叉树;然后在指定的函数框架中填写二叉树的复制代码,最后目标二叉树进行中序遍历。首先给定一组扩展二叉树的前序序列,构建一棵二叉树。然后编写代码复制这棵二叉树,并输出目标二叉树的中序遍历序列。利用线索二叉树输出树的中序遍历序列,并且按照中序顺序输出销毁线索二叉树的过程。给定两组扩展二叉树的前序序列,构建两棵二叉树。
2024-04-12 00:27:28 526 1
原创 根据前序和中序遍历序列创建二叉树
首先找根节点的位置,因为有前序遍历,第一个节点就是根节点,然后在中序遍历中以找出的根节点为界划分左右子树,用递归构建出二叉树,再用后序遍历输出。一棵树的前序遍历序列和中序遍历序列,中间用换行符分开。输入序列中仅包含大小写字母,且没有重复的字母。已知一个二叉树的前序遍历序列和中序遍历序列,求这棵树的后序遍历序列。后序遍历:CBEHGIFDA。一个树的后序遍历序列。
2024-03-30 01:21:32 408
原创 以二叉链表为存储结构,在二叉树中删除以值x为根结点的子树
先判断根节点是否需要删除,需要的话就用release删除,不需要的话就检查其左右子树是否需要删除,左右子树调用delSubTree函数删除。首先输入扩展二叉树的前序序列,构建二叉树,然后输入希望删除的节点,输出删除后二叉树的前序和中序遍历序列。【输出形式】 分两行分别输出删除后二叉树的前序和中序遍历序列。【输入形式】 输入扩展二叉树的前序序列。
2024-03-28 20:27:36 590 1
原创 设计算法判断一棵树是否为完全二叉树--c++
2)如果一个结点有左孩子,而没有右孩子,那么按照层序遍历的结果,这个结点之后的所有结点都是叶子结点,这棵树才是完全二叉树。3)如果一个结点是叶子结点,那么按照层序遍历的结果,这个结点之后的所有结点都必须是叶子结点这棵树才是完全二叉树。1)如果一个结点有右孩子而没有左孩子,那么这棵树一定不是完全二叉树。设计算法判断一棵树是否为完全二叉树。
2024-03-27 18:11:47 550
原创 二叉树与二叉链表--c++【做题记录】
给定扩展二叉树的前序序列,构建二叉树(以二叉链表方式存储),然后将这个二叉链表存储为一维数组,其编号采用满二叉树的编号模式。要求输入扩展二叉树的前序序列,输出以一维数组存储的方式。
2024-03-22 23:32:19 523 1
原创 三元组类与稀疏矩阵运算--c++【做题记录】
按照给定的内容定义一个TripleMatrix类,每个TripleMatrix对象访问一个矩阵的信息。输入:第一行输入矩阵的行m,列n和非零元个数num 后续num行依次输入每个非零元的行,列和非零元的值。输出:首先显示三元组数组的内容,数字之间间隔一个空格。然后以二维数组形式排列的稀疏矩阵效果,数字之间间隔一个空格。输出稀疏矩阵的基本信息:行数,列数和非零元个数。
2024-03-15 19:59:52 691 1
原创 KMP算法--c++
给出两个字符串s1和 s2 ,若s1的区间 [l, r]子串与s2完全相同,则称s2在s1中出现了,其出现位置为l。现在请你求出s2在s1中所有出现的位置。后面多行输出串2在串1中出现的位置。如果字符串2不在串1中,输出-1。next数组初始化:next[0]=-1,next[1]=0.输入母串和子串,返回子串在母串中出现的第一个位置。输入母串abcdefgabcdeeeegdbc。子串在母串中的位置是22。子串在母串中的位置是3。输入子串abcdabd。输入子串bcdebc。【next数组示例】
2024-03-13 18:01:43 507
原创 栈的应用--模拟工厂
有这样一个机器,你按1它就会从左到右,把一个物品抓起放到桶的顶端(如果没有物品可以抓取,就不操作);你按2就会把桶顶端的物品抓出来进行加工,如果桶里什么都没有的话,就不操作。有n个物品,编号为1,2,....,n。第一行输入物品个数n和操作次数m。输出加工过的物品的编号。第二行输入加工的编号。
2024-03-01 22:38:56 412 1
原创 使用堆栈判断回文
【提示】回文字符串是一种关于字符串中心对称的特殊字符串,如果将字符串从中间划分为两个字符串,则只需要将其中一个字符串逆序,其结果与另外一个字符串是相等的。显然,回文字符串的判断中一个重要的操作是将字符串逆序,该操作可以利用栈的LIFO特性轻松实现。将一半字符串压栈,然后依次弹出,依次和另一半字符串的每个字符比较,如果不同,返回false;如果栈为空,返回true。利用Stack类判断一个字符串是否为回文。
2024-02-29 19:23:57 825
原创 表达式求值——堆栈、波兰、逆波兰表达式求值【做题记录】
依次读入表达式中的每个字符,若是操作数则进OPND栈,若是运算符则和OPTR栈的栈顶运算符比较优先级作相应操作,直至整个表达式求值完毕(OPTR栈顶元素和当前读入的字符均为“#”)。该题要求的运算符有‘+’ ‘-’ ‘*’ ‘/’ ‘(’ ‘)’ ‘#’,在运算过程中需要判断优先级,根据下图写出判断优先级代码。“)”和“(”、“#”和“(”、“(”和“#”无法相继出现,如果出现则表达式出现语法错误。θ1=‘+’ ,θ2=‘*’ ,由表可知θ1<θ2,因此可知‘+’的优先级低于‘*’。main.cpp文件。
2024-02-28 22:48:48 686
原创 模板类的使用
完成Stack类的改造,将其设置为模板类。使用这个模板Stack类创建两个堆栈对象。在主程序中创建一个字符堆栈,一个int堆栈,分别压入一个字符串和5个整数,从顶端分别打印出两个堆栈的内容。头歌上的3个测试用例可以通过。
2024-02-27 13:54:03 356
原创 使用堆栈处理字符串
的方式接收字符串,因为cin会屏蔽换行符,不能达到预期的效果。在处理字符串时,要分别对’<’,’@’,’#’,’\n’进行不同的处理。(2)可以在Stack类中增加两个成员函数,方便调用和显示: void displayFromBottom();【题目要求】输入若干串字符,每次遇到换行符’\n’时,则输出本行当前处理结果。输入时以“#”字符作为结束符,当遇到这个符号后,意味着字符串输入结束。在输入过程中如果输入“<”,则表示回退一格;在输入过程中如果包含了“@”,则表示回退到本行行首。
2024-02-26 13:25:38 506
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人