![](https://img-blog.csdnimg.cn/20201014180756757.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
数据结构
haohuaijin
脚踏实地,实事求是。
个人博客: https://haohuaijin.github.io
展开
-
相同,对称二叉树递归和非递归解法
相同,对称二叉树递归和非递归解法一、首先看相同二叉树(判断二叉树是否相同)1.递归递归解法比较简单:1.首先判断根的情况。2.递归判断左右子树。代码: bool isSameTree(TreeNode* p, TreeNode* q) { if((p == NULL && q != NULL) || (p != NULL && q...原创 2019-12-17 17:24:48 · 269 阅读 · 0 评论 -
树后序遍历的非递归实现
树的后序遍历非递归实现今天在刷leetcode的时候发现自己对于后序遍历非递归实现不是很了解,所以在这里记录自己的一点心得。有两种比较好的方法:第一种:通过前序遍历来然后逆序1.前序遍历的过程是:根 - > 左 - > 右2.后序遍历的过程是:左 - > 右 - > 根3.现在将前序的反转的结果是:右 - > 左 - > 根4.于是我们只需要把前序...原创 2019-12-17 16:50:41 · 694 阅读 · 1 评论 -
7-17 Hashing (25 分)
7-17 Hashing (25 分)这道题我的思路是,将得到的地址先储存下来,等处理结束后统一处理。这样做就需要多定义一个数组用来贮存每个数据对应的地址。而更好的处理方法是只用一个数组储存单当前地址的占用情况,将获得的地址随时输出,不储存。我用的是比较笨的第一种。代码:#include <iostream>#include <algorithm>#incl...原创 2019-11-30 17:33:46 · 229 阅读 · 0 评论 -
7-1 Maximum Subsequence Sum (25 分)
7-1 Maximum Subsequence Sum (25 分)经典的最大子列和问题。记得刚开始学数据结构时,MOOC上就是从这个题引出的。当时听的很明白,但是在做这道题目时,一直没法做出来,想了很多的办法,但是一直做不出来。最后,还是从网上找了答案才明白了怎么做。今天突然灵光 一现,两次线性扫描就可以解决了,虽然时间慢一点呢,但是很好理解。代码:#include <iost...原创 2019-11-12 17:09:13 · 250 阅读 · 0 评论 -
7-11 关键活动 (30 分)
7-11 关键活动 (30 分)关键路径问题。一开始我把问题想简单了,以为只要拓扑排序,然后再求最早的完成时间。再求最早时间的时候记录路径就行了。但是发现和我想的不大一样。经过我再一次的思考发现,要把最早时间,最晚时间,边的机动时间。都求出来了才可以,唉,这不就是典型的关键路径吗。大体思路如下:1、读入数据,得到每个结点的入度出度。2、用拓扑排序得到任务完成的先后顺序。3、根据拓扑排...原创 2019-11-09 20:06:40 · 1706 阅读 · 2 评论 -
7-10 公路村村通 (30 分)
7-10 公路村村通 (30 分)这个题就是简单的最小生成树的算法,可以用Prim,也可以用Kruskal。这里我用的Prim因为kruskal我换不是很熟练(haha)。这个题我主要的错误就是对权值矩阵初始化,放在了读取N,M的数据之前。这就导致了我之前的初始化完全没有效果,我换Debug了半天。代码:#include <iostream>#include <al...原创 2019-11-06 22:40:10 · 819 阅读 · 0 评论 -
7-11 Saving James Bond - Hard Version (30 分)
7-11 Saving James Bond - Hard Version (30 分)原题链接:https://pintia.cn/problem-sets/16/problems/673这道题本质是就是一道BFS,只不过要加上路径。 开始做的时候比较顺利,但是总是有一个测试点没过去,找了半天还是找不到错误。于是google一下,发现是没仔细看题。 题目中说,当有多条最短路径时,选择第一...原创 2019-11-05 17:32:08 · 417 阅读 · 0 评论 -
7-9 旅游规划 (25 分)
7-9 旅游规划 (25 分)原题链接:https://pintia.cn/problem-sets/15/problems/717这道题目主要考察的就是Dijkstra算法。只是在他的基础上有一点变形,原来只是有一个边权,但是现在有两个,一个是路径的长度,另一个是花费。所以只需要把Dijkstra算法中更新路径长度的地方再加上关于花费的更新就行了。代码:#include <io...原创 2019-11-04 20:18:21 · 531 阅读 · 0 评论 -
7-10 Saving James Bond - Easy Version (25 分)
7-10 Saving James Bond - Easy Version (25 分)这个题主要是审好题目。步骤:1、读入数据,计算输入点是不是可以到岸。2、对权值初始化,计算各点之间是不是有线。3、一次DFS搜索,看看是不是能从中心到岸边。#include <iostream>#include <cmath>using namespace std;in...原创 2019-11-01 22:15:02 · 395 阅读 · 1 评论 -
7-8 哈利·波特的考试 (25 分)
7-8 哈利·波特的考试 (25 分)看懂题,比较简单。用Floyd算法。1、首先将数据读入,用来初始化图2、用Floyd得到最短路径(各点到各点的全部最短路径)。3、先求出每个点到其它点的最大路径,然后取最小值。AC代码#include <iostream>using namespace std;const int INFO = 100000;struct MGr...原创 2019-11-01 17:30:40 · 378 阅读 · 1 评论 -
7-6 列出连通集 (25 分)
7-6 列出连通集 (25 分)这道题主要考察了DFS,和BFS的基本操作。考察我们对图的构建,以及运用DFS和BFS对图进行遍历。DFS是运用了递归的思想,而BFS则可以通过队列来实现。我在做题时遇到的困难,主要是在BFS的思路和队列的实现上。因为队列原来以为很熟,但现在一写很多细节都忘了。所以数据结构要经常写,要不然忘得很快。下面是代码,可能有点冗杂。#include <s...原创 2019-10-26 20:02:53 · 1778 阅读 · 0 评论 -
7-8 File Transfer (25 分)
7-8 File Transfer (25 分)这道题主要考查了,并查集的一些基本操作。做这道题的时候应该注意要按大小union和压缩路径。#include <stdio.h>#include <stdlib.h>#define INFO -100000int Parenet[10001]; //储存父节点int Find(int c1){ for(;...原创 2019-10-21 16:42:43 · 174 阅读 · 0 评论 -
7-5 Tree Traversals Again (25 分)
7-5 Tree Traversals Again (25 分)这道题给出的是利用Stack来进行中序遍历的操作,让我们根据操作来得到后序遍历的结果。我的思路是根据题目给出的操作,反向建立二叉树。 最后后序遍历得到答案。AC代码:#include <stdio.h>#include <stdlib.h>#include <string.h>type...原创 2019-10-17 20:08:11 · 258 阅读 · 1 评论 -
7-5 堆中的路径 (25 分)
7-5 堆中的路径 (25 分)就是简单的堆操作,比较简单。代码:#include <stdio.h>#include <stdlib.h>typedef struct Node *Heap;struct Node{ int Data[1001]; int Size,Capacity;};Heap CreateHeap(){ Heap...原创 2019-10-14 12:31:34 · 454 阅读 · 0 评论 -
7-2 Reversing Linked List (25 分)
7-2 Reversing Linked List (25 分)这道题可能看题目一头雾水,但是仔细思考就会发现并不太难。下面是我的思路:1、用类似静态链表的方法,来表示List,即一个数组存Data,一个数组存Next2、循环遍历链表,用a[]记录下标。3、根据K来转置链表,修改Next,后转置a[](顺序很重要)。#include <stdio.h>#include &...原创 2019-10-13 09:43:27 · 1020 阅读 · 0 评论 -
符号配对 (20 分)
符号配对 (20 分)思路:1、将数据全部都读入,然后预处理为只有(),{},[],/*/的形式。2、利用栈来判断是否相符其实本题的难点也是这两方面,读入数据.和\n比较麻烦。可以同getchar()和字符数组来处理。二就是,再利用栈判断是否相符时,需要些很多的if和else if的结构,用来分辨多种条件。由于我并没有这道题的权限,所以代码没有在OJ上跑过,但是三个例子均可成功,我也...原创 2019-09-28 00:00:27 · 1409 阅读 · 0 评论 -
7-20 表达式转换 (25 分)
7-20 表达式转换 (25 分)历时三个半小时终于完成。这道题的难点主要是在处理数字前的正负号上,同时还应该注意数字有小数点并且不是一位数字。因为在做题之前同学给我说过这道题,也知道几个坑,所以做题的过程比较顺利。我的步骤如下:1、先完成不考虑数字前的正负号的程序。2、考虑数字前的正负号,完善程序。通过上面的步骤,做题的过程比较的顺利,把难题变成了简单的的题目。在第二步的时候...原创 2019-10-03 12:02:49 · 2469 阅读 · 1 评论 -
7-4 是否同一棵二叉搜索树 (25分)
7-4 是否同一棵二叉搜索树 (25分)开始是卡在怎么读数据上(果然还是读数据可怕,好几次都是卡在这里????????),中间有1、2天没有再碰这道题。然后今天想着不能再拖了,就硬着头皮解出来了。想法:一开始是想着不用构建树,用数组处理的,但是左思右想没有思路。然后我就构建了树的结构,用前序遍历的方法来比较树是不是相同。所以整体上来看思路比较简单。AC代码:/** * 这道题的主要思路是: ...原创 2019-10-06 12:21:03 · 654 阅读 · 0 评论 -
7-4 List Leaves (25 分)
7-4 List Leaves (25 分)这道题在逻辑上并不难,难在我们可能树不是很熟悉上。我用了静态链表的方法构造树,用循环队列来用数组实现队列。思路:1、将数据读进来用,找到根节点。2、递归找到所有的叶子节点。3、用队列实现层次遍历,来找到树各层的元素。4、比较叶子节点和层次遍历的结果得到最终的结果。#include <stdio.h>#include <...原创 2019-10-02 17:40:35 · 404 阅读 · 0 评论 -
7-3 Pop Sequence (25 分)
7-3 Pop Sequence (25 分)刚开始受严蔚敏数据结构的启发,想用比较大小的方法来判断是不是出栈序列。但是发现最后一个测试点就是卡这个算法。然后看了柳神的博客,自己根据理解重新写了算法,但是第二个测试点还是过不去,下面是我的想法。步骤:循环判断数组中的每一个数,初始化temp=1 ,用temp来判断当前数组的最大值。如果数组当前值小于temp,就出栈,若大于等于temp就入栈,...原创 2019-10-11 16:25:41 · 695 阅读 · 0 评论 -
7-1 最大子列和问题 (20 分)
这是浙大Mooc数据结构第一周的课后题,求最大的字节和,姥姥说要用课上的三种方法都是实验一遍,前面的都比较简单。但是用递归求解着实费了我半天劲,想了很久才想了怎么实现。下面就是实现的过程:#include <stdio.h>int maxseq(int a[],int start,int end);int main(){ int num; int a[100...原创 2019-09-10 19:46:06 · 323 阅读 · 0 评论