作者简介:大家好,我是未央;
博客首页:未央.303
系列专栏:递归、搜索与回溯算法
每日一句:人的一生,可以有所作为的时机只有一次,那就是现在!!!!!
文章目录
- 前言
- 一、二叉树的所有路径
- 1.1 题目描述
- 1.2 题目解析
- 1.2.1 算法原理
- 1.2.2 代码编写
- 二、全排列
- 2.1 题目描述
- 2.2 题目解析
- 2.2.1 算法原理
- 2.2.2 代码编写
- 总结
前言
一、二叉树的所有路径
1.1 题目描述
描述:
给你一个二叉树的根节点
root
,按 任意顺序 ,返回所有从根节点到叶子节点的路径。叶子节点 是指没有子节点的节点。
提示:
- 树中节点的数目在范围
[1, 100]
内-100 <= Node.val <= 100
示例1:
示例2:
1.2 题目解析
1.2.1 算法原理
本题我们可以采用递归的方法解决;
而要写好一个递归,首先就要知道递归的三部曲:
第一步:
先找一下是否有和主问题相同的子问题!!!!!-----> 关系到函数头的设计;
第二步:
只需要关心某一个子问题是如何解决即可!!!!-----> 关系到函数体的书写;
第三步:
最后再注意一下递归函数的出口即可;
所以我们首先就要思考以上三个问题的解决:
第一步:函数头
我们题目要求
而将两个链表合并就成了和主问题相同的子问题;
而函数头就和题目中给定的函数头一样;
第二步:函数体
我们要找到某一个子问题如何解决;
子问题即:
要解决上述子问题:
(1)
(2)
(3)
第三步:递归出口
递归出口即:
1.2.2 代码编写
代码解析:
二、全排列
2.1 题目描述
描述:
给定一个不含重复数字的数组nums
,返回其 所有可能的全排列 。你可以 按任意顺序 返回答案。
提示:
1 <= nums.length <= 6
-10 <= nums[i] <= 10
nums
中的所有整数 互不相同
示例1:
示例2:
示例3:
2.2 题目解析
2.2.1 算法原理
本题我们可以采用递归的方法解决;
而要写好一个递归,首先就要知道递归的三部曲:
第一步:
先找一下是否有和主问题相同的子问题!!!!!-----> 关系到函数头的设计;
第二步:
只需要关心某一个子问题是如何解决即可!!!!-----> 关系到函数体的书写;
第三步:
最后再注意一下递归函数的出口即可;
所以我们首先就要思考以上三个问题的解决:
第一步:函数头
我们题目要求
而将两个链表合并就成了和主问题相同的子问题;
而函数头就和题目中给定的函数头一样;
第二步:函数体
我们要找到某一个子问题如何解决;
子问题即:
要解决上述子问题:
(1)
(2)
(3)
第三步:递归出口
递归出口即:
2.2.2 代码编写
代码解析: