Leetcode刷题小tips

网上学习资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。

需要这份系统化的资料的朋友,可以点击这里获取!

一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!

二叉树解题

二叉树的递归遍历(迭代法)(深度优先搜索

二叉树的层序遍历(广度优先搜索

二叉树类型的题目所有都是基于上述的遍历顺序进行的,尤其是递归算法!拿到一道二叉树的题目,应该遵循以下的思考顺序:

1、选择遍历顺序(因为涉及到二叉树节点的读取和处理,所以一定离不开遍历)

2、题目要求我们做什么(处理内容),那么这就往往是“”的时候要做的事情

二叉树的翻转

  1. 这道题应该是要用递归方法来做才好了,那么选择什么递归遍历方式呢?前序可以、后序可以但是中序不太行,因为会出现重复翻转的情况
  2. 翻转函数我们可以直接调用swap()函数进行实现
  3. 递归3部曲

对称二叉树

  1. 这道题需要用两个指针分别从根节点的左右两个方向去判断是否对称,一旦有遇到不对称的即为 非对称二叉树
  2. 对称二叉树的处理内容就是判断,判断某个节点能否与另一个节点对称;
  3. 可以用层序遍历,将每一层的节点收集到一个vector数组中并用双指针法判断其是否对称;可以用递归的方法,相当于判断根节点的左右两个子树是否是可以相互翻转的。
  4. 对于递归的方法而言,由于判断的逻辑是:判断根节点的左右两个子树是否可以翻转,才能判断出以根节点为跟的树是否是对称的,那么就有点自下而上的意思了,因此只能后序遍历

二叉树的最大深度

方法一:层序遍历,很好做,只要统计二叉树遍历的层数即可得到最大深度。

方法二:深度优先即递归法,通常,求高度用后序遍历;求深度用的是前序遍历。

二叉树的最小深度

方法一:层序遍历,很好做,遇到左右孩子均为空的情况就返回层数即可。

方法二:深度优先递归法,求二叉树的最小深度和求二叉树的最大深度的差别主要在于处理左右孩子不为空的逻辑。

此处总结以下递归的思想:

以上面两题为例,对根节点而言,求最小深度就是要求最小的高度,要 求根节点的最大/最小高度,就要求左右子树的最大/最小高度,得到左右子树的最大/最小高度以后 + 1;然后要 求左子树的根节点的最大/最小高度,······,最终递归到了叶子节点:要得到叶子节点的高度就返回以叶子节点为根节点的树的最大/最小高度,因此终止条件就是遇到空节点时将返回0,然后在上一层+1;想明白这个处理逻辑以后,按照单层递归的逻辑去思考写好代码,其实程序就是会按着一层一层的去遍历。

完全二叉树的节点个数

方法一:层序遍历,这就和普通的二叉树求节点的方法没什么区别了!

方法二: 要注意到,完全二叉树中是包含了满二叉树的,(在完全二叉树中如何判断子树是满二叉树呢?方法为:(在完全二叉树中,向左递归的深度 = 向右递归的深度))。那么用后序遍历的方法求完全二叉树的节点数量,首先应该判断一个子树是否完全二叉树,并计算该完全二叉树的深度,若是,直接用公式计算该子树的节点数量,若不是则继续递归。

110.平衡二叉树

深度优先遍历递归法,处理的内容就是,分别计算节点的左右子树的高度,判断左右子树的高度差绝对值超不超过1(求高度用的是后序遍历),若不超过1,则返回该节点的最大高度;若超过1,那就不用再进行判断了,因为整颗树就已经是非平衡的二叉树,直接返回false就可以了!

贪心算法

贪心算法的整体思路就是通过局部最优推出全局最优。用直白的话来说就是指:想要完成整个任务,那就得一个一个来完成。

例如:分发饼干中,想要让尽可能多的孩子吃饱,那么就得让一个一个孩纸吃饱。如此产生的解题思路就是,优先用大尺寸的饼干先喂饱胃口大的孩子,一个一个饼干喂。

动态规划算法

怎么确定是动态规划的题目呢?

  • 需要用到前面或者后面的状态去确定当前状态的值。
  • 要善于举例子,从第一层、第二层开始思考,而不是宏观的将其数学式子列出来(动态规划就是利用子问题推导出总的问题的)。

动态规划解题5步曲:

  1. 确定dp数组以及下标的含义
  2. 确定递推公式
  3. dp数组如何初始化
  4. 确定遍历顺序
  5. 举例推导dp数组

动态规划解题思路总结

C++语法基础

数组

定义一个n*n的二维数组
vector<vector<int>> res(n, vector<int>(n, 0)); 
// 使用vector定义一个二维数组

定义多个同类型的变量

int startx = 0, starty = 0;//注意中间是,号 不是分号;

将int型变量转换为string | 将string类型变量转换为int



**网上学习资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。**

**[需要这份系统化的资料的朋友,可以点击这里获取!](https://bbs.csdn.net/topics/618635766)**

**一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!**

  • 5
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值