ACM总结

第十次

这一周我们正式恢复线下。在这一周里面我看的主要内容还是搜索,虽然老师已经开始讲了一点STL,但是老师发的搜索的题目我还没有看完。这一周主要就是接着上一周的看,然而这一周其实我没有和上个周一样一直看题目几乎没有看题解。在这一周里,我接着往下看了几道题目,并将上一周看的题目的题解看了一些,复习了一下关于矩阵的搜索题目,主要看的是关于二叉树的内容。

下面是关于搜素类型的题目,以及我这个星期主要的学习内容:

  • 背包问题
  • 矩阵问题(这两个在之前的博客里说过,在这就不加累述了)

  • 二叉树问题相结合

这一类问题就是给你一棵树在树上进行操作。

有这样一道题目,题意是给出后序和中序,然后让求前序,这二叉树中,后序的最后一位就是这个树的根结点,然后在中序中找到这个根结点,这个中序就会被这个根结点分成俩部分,然后按照这俩部分的顺序在后序里面找出依次的顺序,这样就有了俩对中序和后序,就可以进行上面的操作。实现过程主要就是递归,依次搜索出根结点。

还有这样一个题目就是求一个树的深度和最大宽度最主要的是求俩个点之间的距离。对于二叉树,之前在深入浅出上只是看了一些很浅的内容,并且没有敲过相关代码。所以这还是我第一次见求其深度与宽度的代码,主要是建立一个深度的数组和一个宽度的数组,在读取数据时(一般的数据前面为父a,后面为子b),就可以知道depth[a]=depth[b]+1; 然后枚举所有的点,统计出最大的深度,并且可以同时记录一下每一层的宽度。

然后找到最大的宽度。接下来就是最主要的找俩点之间的距离,就是找最近公共祖先。我看的题解是这样写的:分情况讨论,如果俩个数位于同一深度,则同时访问他们的父结点,如果深度不一样,那就用深的那一个数的父结点和另一个点进入下一层搜索。直达找到最近公共祖先,然后用最近公共祖先的深度减去这俩个数的深度。

二叉树还有一个是关于树的分解,讲树分成几个含结点数相同的连通块。这个题目的主要思想就是求出每一个结点的所有子结点的个数,然后从下面开始遍历,如果个数子结点大于k,当然这个树就是不能分解的树了。我理解的大概思想是这样,可是我没有多大看懂上面的代码。

  • 就我看到的题目,里面还有关于路径和图论的题目,这个是我下周主要看的方向。这个类型的题目也有好多,有的是找出满足题意的点,还涉及到方向。有一个拓扑序,它可以对顶点进行一定的排序,箭头后面的顶点一定再后面。

另外加上一个这个星期看到的函数哈,isdigit()函数用于检测输入的字符串是否只由数字组成,位于<cctype>头文件中。

最近几周一直在看搜索的题目,就之前看的算法笔记和深入浅出也好久没有再往下看了,所以希望我赶紧将搜索的题目看完(并且理解哈),可以接着了解一些其他的内容

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值