![](https://img-blog.csdnimg.cn/20200420115934725.jpg?x-oss-process=image/resize,m_fixed,h_224,w_224)
数据结构
中国大学mooc平台中浙江大学陈越、何钦铭老师讲授的数据结构课程的课后习题以及算法书上有关树和图的问题学习。
Jingyao2021
有技术的人很酷。
展开
-
深度优先搜索思想模板
找一条从A到B的路bool Dfs(V){//判断从V是否有一条到终点B的路 if(V为终点) return true; if(V为旧点) return false; 将V标记为旧点; 对和V相邻的每个节点U{ if(Dfs(U)==true) return true; } return f...原创 2018-12-01 23:07:04 · 39 阅读 · 0 评论 -
华东师范OJ 1817最短路径(Dijkstra、Floyd)
1817. 最短路径题目链接解题思路源代码题目链接华东师范OJ 1817解题思路属于最短路径的模板题,Dijkstra算法是对有v个顶点的图,求起点s到图中所有顶点的单源最短路径。【算法过程】循坏v次,每次从未访问的顶点中找出一个距起点s最近的点u,加入已访问集合,并以u为中介点优化从u能到达的顶点v到起点s的最短距离。集合用bool型的vis数组实现,d数组存放起点到其他结点的最短距离。源代码#include<iostream>#include<vector>原创 2020-07-08 14:58:51 · 207 阅读 · 0 评论 -
审美课 之怎么会有这么奇妙的解法--树的思想
审美课之树可以怎么用题目原题链接题意解题思路源程序我的收获题目原题链接蓝桥杯 算法训练 审美课题意大致内容是有n个长度为m的01串,问这n个串中有几对是完全相反的。比如这个输入样例:3 2(有3个长度为2的01串)1 0(第一个串是10)0 1(第一个串是10)1 0(第一个串是10)输出为2,有两对完全相反的01串(第一个和第三个串都和第二个串完全相反)。解题思路如果...原创 2020-05-07 09:57:17 · 245 阅读 · 0 评论 -
理解小球下落(Dropping Balls)
理解小球是怎么下落的题目来源内容直接模拟最后一个球的过程题目来源《算法竞赛入门经典》6.3节树和二叉树例题6-6(P236)内容有一棵二叉树,最大深度为D,且所有叶子的深度都相同。所有结点从上到下从左到右编号为1, 2, 3,…, 2D-1。在结点1处放一个小球,它会往下落。每个内结点上都有一个开 关,初始全部关闭,当每次有小球落到一个开关上时,状态都会改变。当小球到达一个内结点...原创 2020-04-20 14:30:39 · 2013 阅读 · 1 评论 -
Counting Leaves (DFS和BFS解法)
Counting Leaves原题链接解题思路源代码BFSDFS原题链接PAT 甲级 1004解题思路这道题目是求树的每一层上的叶子节点个数。整一个leaf[]数组记录每一层的结点个数DFS或者BFS树,在遍历过程中记录结点的层数(或者说高度),如果该结点为叶子节点,就把该层次(深度)的leaf值++。我写DFS和BFS的习惯这几题可以看出是一模一样的,DFS中把结点的层次或者深度作...原创 2020-04-06 15:40:15 · 280 阅读 · 0 评论 -
The Largest Generation(DFS和BFS)
The Largest Generation原题链接解题思路源代码DFSBFS原题链接PAT 甲级 1094解题思路这道题目要求每个深度下的结点个数,即每层的结点个数,然后输出最大的结点个数和其层数。照样遍历树的过程中可以统计每一层的结点个数。通过这几道关于树的遍历的DFS和BFS写法,可以发现DFS比BFS写起来要简洁,但是我觉得BFS更好理解。源代码DFSDFS函数的参数为当...原创 2020-04-06 15:00:28 · 209 阅读 · 0 评论 -
Highest Price in Supply Chain (DFS和BFS)
1090 Highest Price in Supply Chain原题链接解题思路源代码DFSBFS原题链接PAT 甲级 1090解题思路这道题是求最深的叶子结点的个数以及其深度。那么就遍历整棵树,发现访问到叶子结点时就更新全局的最大深度和结点个数。源代码DFS深度搜索的函数参数需要的参数是当前访问的结点下标序号index和当前结点的深度depth;#include<io...原创 2020-04-06 14:19:49 · 135 阅读 · 0 评论 -
Total Sales of Supply Chain (DFS和BFS两种实现)
1079 Total Sales of Supply Chain原题链接解题思路源代码DFSBFS原题链接PAT 甲级 1079解题思路这道题其实就是要知道叶结点的深度,最后的总价值就是:叶结点处的权值*pow(1+r, 叶结点的高度),其中r是每个分销商或零售商的价格增量百分比。那么求叶结点的深度就是树的遍历了,可以进行DFS或者BFS.DFS每次都一直沿一条分枝向下走直到遇到叶结点...原创 2020-04-06 12:30:31 · 160 阅读 · 0 评论 -
1102 Invert a Binary Tree
1102 Invert a Binary Tree 原题链接解题思路源代码原题链接PAT 甲级 1102解题思路常规的遍历树题,主要是如何反转二叉树?只要在后序遍历访问根结点时,交换左右子树即可,从最底层开始交换左右子树。反转之后进行层序遍历和中序遍历即可。发现不反转也可以进行符合要求的层序遍历,只要每次先让队列首的右结点入队,再让左结点入队就可以了,但是如何不反转树得到符合要求的中序...原创 2020-04-06 11:48:35 · 120 阅读 · 0 评论 -
05-树9 Huffman Codes(不建树)
05-树9 Huffman Codes原题链接解题思路源代码原题链接树(下)课后练习题3解题思路题目给了提示,不一定要每次都建立哈夫曼树,而是通过比较前缀码的长度是否为最优。那么对于给定的一组字符和频率(因为输入输出字符都是按顺序的,所以没必要存这些字符),可以不建哈夫曼树的得到其WPL,主要是利用优先队列模拟小顶堆,只要优先队列中的元素个数大于1,就从中取出最小的两个元素,WPL加上这...原创 2020-04-05 21:59:36 · 676 阅读 · 0 评论 -
05-树8 File Transfer(并查集的路径压缩和按规模归并)
05-树8 File Transfer原题链接解题思路源代码原题链接树(下)课后练习题2解题思路并查集的基本实现与应用,外加路径压缩和按秩归并,按秩归并有按高度归并和按规模归并两种,我更喜欢按规模,就是元素个数嘛。之前不知道要归并,以为路径压缩了就完事大吉了,并查集用数组father[]实现,如果father[i] = i表示i是根结点,第一种写法没考虑归并,把father值都插入set...原创 2020-04-05 17:13:19 · 370 阅读 · 1 评论 -
05-树7 堆中的路径
05-树7 堆中的路径原题链接解题思路源代码原题链接树(下)课后练习题1解题思路一定要认认真真看输入输出样例,确保和自己想象中的一致,包括顺序啊格式啊,不然很可能做到最后才发现理解错了意思。有了这个好习惯之后(之前经常看个大概题目就去做然后提交才发现理解错了):一看题目想当然的认为是假定输入元素是按照完全二叉树结构摆放的,再从最后一个非叶子结点开始向下调整得到最小堆,但是发现和输出样例...原创 2020-04-05 15:32:09 · 223 阅读 · 0 评论 -
Complete Binary Search Tree
04-树6 Complete Binary Search Tree原题链接解题思路源代码心得体会原题链接树(中)课后练习题3解题思路因为n个结点的完全二叉树的结构是固定的!又因为是二叉查找树,也就是结点间的大小关系是固定的!那么不需要去考虑如何构造这样一棵树,而是转而去考虑如何将给定的元素填在某个合适的结点上。那么首先对输入元素从小到大排序,借助树结构固定这一优势,只要我们确定了左右子树...原创 2020-04-04 21:04:44 · 316 阅读 · 3 评论 -
建立维持平衡二叉树(Root of AVL Tree)
Root of AVL Tree原题链接解题思路源代码原题链接树(中)课后练习题2,也是PAT 甲级 1066解题思路根据输入结点建立一个AVL树,输出树根即可。这个何老师将的旋转类型是根据“麻烦结点”相对于“破坏节点”的位置来定义的,我这里实现方式是参考算法笔记中的,R就表示右旋,L表示左旋,是根据旋转的方向取得名字。贴一下图,感觉很好理解。源代码建树过程和建立一棵BST比较类...原创 2020-04-03 10:40:17 · 266 阅读 · 0 评论 -
是否同一棵二叉搜索树(段错误的原因)
是否同一棵二叉搜索树原题链接源代码段错误原题链接树(中)课后练习题1源代码/*判断是否为同一棵BST:如果每次搜索所经过的点在前面均出现过,则一致否则,遇到了之前没有访问过的点,两棵树一定不一致 */#include<iostream>using namespace std; int n;struct node{ int data; node* left;...原创 2020-04-03 10:16:13 · 225 阅读 · 0 评论 -
Tree Traversals Again(递归和非递归遍历,根据先序中序建树、不建树也可解决)
03-树3 Tree Traversals Again原题链接解题思路递归的中序遍历非递归的中序遍历非递归的后序遍历回归本题源代码心得收获原题链接树(上)课后练习题3解题思路这道题是给了用栈实现的中序遍历的非递归中间过程,要求根据这个中间过程建树并对其进行后序遍历。那首先得理解用栈实现的非递归输出的中间结果包含了什么信息,先了解一下递归和非递归遍历的各自实现方式。递归的中序遍历没啥说的...原创 2020-04-01 12:05:01 · 534 阅读 · 0 评论 -
List Leaves
03-树2 List Leaves原题链接解题思路代码实现原题链接树(上)课后练习题2解题思路又是需要自己找根结点的问题(和之前的思路一样,不是任何结点的孩子那它就是根结点),利用了静态链表的思想,创建结构体数组在读入数据的时候记录每个结点的左右孩子的地址(用数组下标)。然后进行层序遍历,用STL中的队列queue实现非常方便,这里要求只输出叶子结点,那只要在访问结点(这里访问就是输出其...原创 2020-04-01 11:29:46 · 178 阅读 · 0 评论 -
树的同构
03-树1 树的同构原题链接解题思路代码实现学习收获原题链接树(上)课后练习题1解题思路思路直接上中国大学mooc听何钦铭老师讲吧~讲的很好代码实现#include<iostream>//03-树1 using namespace std;const int maxn = 110;struct node{ char data; int l;//左孩子的地址 i...原创 2020-04-01 11:21:14 · 180 阅读 · 0 评论