- 博客(21)
- 收藏
- 关注
原创 最小生成树的唯一性
kruskal,第一遍保存重复权值的边,然后把每一条保存的删掉一次做kruskal,这道题代码有好几个亮点重点降低复杂度,首先是路径压缩新方法,再是qsort对结构体排序;题目:给定一个带权无向图,如果是连通图,则至少存在一棵最小生成树,有时最小生成树并不唯一。本题就要求你计算最小生成树的总权重,并且判断其是否唯一。
2024-05-30 12:37:49 218
原创 Is Topological Order pta 6-29
先讲思路,,题目在最后;插个图方便理解:这道题属于拓扑排序的运用,可以用拓扑排序的思路做,but,:遍历Seq的每一个元素 Seq[ i ] 并确定其在 图Graph 中对应的下标 v ,比如:5 2 1 3 6;i=2时v对应图中1(此时5和2都已经被收集),1指向2和3,而2已被收集,说明不是拓扑排序,return false;题目:SeqGraph。
2024-05-18 18:56:45 296
原创 Shortest Path [4] PTA 6-22
两种答案,先说思路,,第二种答案是对第一种的改良,但是两种思路一样,题目在最后:建立在Dijkstra算法的基础上,多加了一个数组PathNeS来记录从S到每个点经过的最少边数,对于和S相邻的边,我们初始化其PathNeS为1;在while的每次循环里确定v后,在for循环里,我们先,若等于,则若满足,则更新PathNeS[i]和path[i],使其通过v来到达;(注意这道题要求到这个点最短时边数最少的路)再判断是否收集i和通过v到i是否会比原先记录的短,若满足,更新dist和path时也;
2024-05-14 16:47:54 1023 1
原创 Strongly Connected Components pta
有向图求强连通分量1,比如这个图·,3这个点如果从0出发是遍历不到的,所以我们把tarjan函数在给定函数里调用,从0出发遍历一遍,如果未被访问就对该点调用一次tarjan函数。2,tarjan函数里有一个if(G->Array[x]),如果没有这个判断,则对于孤立不连通的一个结点会段错误,其对于的Array[x]是NULL。
2024-04-29 20:29:01 211
原创 A+B with Binary Search Tree(pta)
第二种方法(正确的)思路:先对root2左根右遍历得到升序序列并存在数组B里,遍历完后B的下标ib正好在最后一个元素的位置,再对root1左根右升序遍历,同时对每一个结点的值T->val,先和a[ia]比较是否相等,再和B[ib]比较,如果二者的和大于target就ib--,B向前走,直到等于或者小于时即可跳出,若等于还要存储在a里。缺点:时间复杂度接机N^2,对于重复结点的判断没有必要专门遍历一遍a,完全可以直接和a[i-1]去比,因为按照升序序列遍历,相同的两个节点本身就连在一起。
2024-04-12 13:14:42 977
原创 Height of BST(pta)(数组模拟二叉树)
第一种思路:先序遍历根左右,我创建一个数组T,来存放BST,create函数实现一边建树一边计算高度,建树,先for循环找出比当前根大的第一个结点的下标作为ir,即右子树在preorder的起点,create的四个参数分别是:T-创建的BST,preorder-当前处理的子树的起点数组,n-当前处理子树的元素个数,ic-当前处理子树的根在T中存放的位置下标。但是算法走向差不多。第二种思路和第一种差不多,免去了创建T的过程,相对简单一点,也不用计算左右子树在T中的位置,还是顺着创建树的思路在走。
2024-04-09 15:16:30 239
原创 IsCBST(pta)
题目是英文,大概就是先把输入的数组变成二叉搜索树树,再判断是否是完全二叉树,并且把先序遍历的结果存在A里。这道题没有给树结构体所以用数组做,存储有点像堆,区别是这个。
2024-04-08 22:11:27 141
原创 二叉搜索树中的公共祖先pta
其中Tree的定义如下:Tree Left;Tree Right;函数LCA须返回树T中两个结点u和v的最近公共祖先结点的键值。若u或v不在树中,则应返回ERROR。
2024-04-07 22:11:34 338
原创 是否二叉搜索树pta
其中BinTree结构定义如下:函数IsBST须判断给定的T是否二叉搜索树,即满足如下定义的二叉树:定义:一个二叉搜索树是一棵二叉树,它可以为空。非空左子树的所有键值小于其根结点的键值。非空右子树的所有键值大于其根结点的键值。左、右子树都是二叉搜索树。如果T是二叉搜索树,则函数返回true,否则返回false。
2024-04-07 21:57:56 298
原创 单链表的分段逆转pta(超级简单简洁)
题目在最后面,先说思路,创建一个p和pre指向L的后一个结点(p是每次都先后走,便于a记录数据,而pre是每一小段的起点,集齐K个后,以pre为起点开始放数据),一个数组a用来记录当前一段的所有数据,每次先把p的数据放入a里面,然后i++;在后面判断i是否等于K,也就是是否集齐K个,及其即可逆转,若满足则将a中元素从i-1到0一个个放入pre->Data中,完成当前一段的逆转,这段代码巧妙在如果最后一段不满足K个,就不会逆转,省去了判断,超级简洁,测试点一把过。
2024-04-01 19:25:08 835
原创 二叉树的所有路径 sprintf函数 递归
通过这道题的引用,学习sprintf函数,以及DFS,巧妙地使用一个countpath数组(这里注意是整型,所有后面用了sprintf函数来存入元素)记录了每一条路,虽然每一次调用时该数组的名称是一样的,但是每条不同路径里(也就是T->left或者T->right)countpath都不一样,再在遇到叶子结点是,动态分配一块空间char类型的stor来从count path中读出该条路径的元素。,返回所有从根节点到叶子节点的路径。给你一个二叉树的根节点。是指没有子节点的节点。
2024-03-31 22:33:13 200 1
原创 1382.将二叉搜索树变平衡
思路:先用中序遍历一遍,由于二叉搜索树的特殊性,左根右得到的便是一个升序数组,所以不用排序即可直接递归加二分查找来创建树。这个递归记录二叉树结点的方法很nice,用一个记录数组下标的量int* pos,记录到数组int arr[]里,中值arr[mid]作为每一次的根。的二叉搜索树,新生成的树应该与原来的树有着相同的节点值。这不是唯一的正确答案,[3,1,4,null,2,null,null] 也是一个可行的构造方案。对比我的版本,我的是创建了一个完全二叉平衡搜索树。你一棵二叉搜索树,请你返回一棵。
2024-03-29 19:59:17 277
原创 树的同构(pta)
题目直接看陈越老师的视频p39;或者pta树的最后一题;实现:树由结构数组实现,一个结点里放了数据和左右结点的数组下标(left和right);
2024-03-27 23:03:03 199
原创 pta小孩报数(顺序循环队列)引发的对于指针和分配了空间的指针的思考(有该题答案两种)
(总之代码实现并不难,只是这两段代码让我思考了指针和分配了空间的指针使用上的区别,即代码一时分配了空间的指针,而二则只是纯用来指向空间的指针)分割线-------------------分割线------------------------分割线--------------------------分割线---------------分割线。//出队,返回出队元素e,且成功出队返回true,否则返回false;//出队,返回出队元素e,且成功出队返回true,否则返回false;否则返回false;
2024-03-19 14:33:28 416
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人