目录
递归是什么
递归是一种重复将问题分解为同类的子问题而解决问题的方法。形式通常为函数的自调用。
递归有“递”和“归”2个环节,先将问题从大往小了递,获得小问题的答案之后再往大问题“归”。
递归通常要找到递归公式以及return的条件。
递归能解决的问题
1. 数据的定义是按照递归定义的,比如斐波那契函数:
2. 问题的解法按照递归算法实现,比如汉诺塔。
3. 数据的结构形式按照递归定义,比如二叉树。
举例
1.二叉树的前序遍历
https://blog.csdn.net/zy1994384/article/details/128269644?spm=1001.2014.3001.5502
2.二叉树的最大深度
给定一个二叉树,找出其最大深度。
二叉树的深度为根节点到最远叶子节点的最长路径上的节点数。
示例:
给定二叉树 [3,9,20,null,null,15,7],
3
/ \
9 20
/ \
15 7
返回它的最大深度 3
来源:力扣(LeetCode)
链接:https://leetcode.cn/problems/maximum-depth-of-binary-tree
解题思路:递归的终止条件:当前节点为空,表示当前高度为0
递归的子问题:获取当前节点,左右子树节点的高度的最大值,同时+1,表示当前节点的高度
int maxDepth(struct TreeNode* root)
{
if (root == NULL) {
return 0;
}
else return fmax(maxDepth(root->left), maxDepth(root->right)) + 1;
}