本文主要是引用三套题解决递归问题的回答,现在主要是将思路整理,以及收纳遇到的递归的题目,方便自己学习。
递归学习三步走
- 看终止条件(这边我做的时候以一个或者没有那种来算的)
- 看本级递归是需要什么
- 看本级递归的返回值,主要是看问题他需要什么,你尽量往答案上靠,有些时候直接就是答案要的有些需要你拐个弯才行
做递归的时候,一定不要往下走,这样会把自己套牢了,一层一层往下走,但是递归是自己调用自己,因此我们只需要关注一级递归的解决过程即可。千万不要纠结每一次递归下去的细节!
先以原博客的例题为先吧,下面我刷力扣的时候带着往博客中添加。
力扣 104 求二叉树的最大深度
- 初始条件就是如果该树不存在就返回0就好了,这是简单的做法,要看他的终止条件那就是到底了这个节点没有左右子树,那左右子树的深度就是0,返回就是左右子树深度0+1,
- 返回值确定了就是max(左子树深度,右子树深度)+1
- 深度是看某一个节点的,要看左子树节点的深度和右子树节点的深度,取大的+1,就是某一个节点的深度。所以这题一个阶段就是只有三个节点根、左、右。
- 代码:
def maxDepth(self,root):
if root==None:
return 0
left_height=self.maxDepth(root.left)
right_height=self.maxDepth(root.right)
return max(left_height,right_height)+1