一、为什么要用递归
采用递归编写程序能使程序变得简洁和清晰.可能需要很多步骤才能解出来的题目,用递归一行代码就能解决.
一、递归三步曲
-
1、找到递归的终止条件:递归应该在什么时候结束?
-
2、找到返回值:应该给上一级返回什么信息?
-
3、本级递归应该做什么:在这一级递归中应该完成什么任务?
二、递归的例子
1、求二叉树的最大深度
看leetcode104题:求二叉树的最大深度 直接套用递归三部曲:
-
1、找终止条件:当树为空,树的深度就为0,此时递归就结束了.
-
2、找到返回值:应该返回什么?题目要求我们返回树的最大深度,最大深度必定出现在左子树或右子树中.那么返回值就应该是当前树的最大深度.
-
3、本级递归应该做什么:首先,还是强调要走出之前的思维误区,递归后我们眼里的树一定是这个样子的,看下图。此时就三个节点:root、root.left、root.right,其中根据第二步,root.left和root.right分别记录的是root的左右子树的最大深度。那么本级递归应该做什么就很明确了,自然就是在root的左右子树中选择较大的一个,再加上1就是以root为根的子树的最大深度了,然后再返回这个深度即可。
参考博客:参考博客
转载于:https://juejin.im/post/5cf68cb26fb9a07f0a2dcd78