1. 递归、深搜和回溯法的区别
1)递归
- 递归函数:程序的一种实现方式,即函数进行自我调用,就是我们常说的“递归”。
- 递归算法:即大问题的结果依赖于小问题。
2)深搜
可以使用递归函数来实现,也可以不用递归函数实现。DFS是指在搜索的过程中优先搜索深度更深的点。
3)回溯
回溯法就是深度优先搜索。回溯操作就是,当递归函数回到上一层递归调用处的时侯,一些参数和局部变量需要改回到调用前的值。
注:通常在树结构中找路径时,需要在搜索过程中加入回溯操作。
2. 遍历法 & 分治法
遍历法:通常用到一个共享参数,访问并记录所有节点。通常用于记录路径path。
分治法:将大任务分解为子任务,利用return value记录子任务的结果,并进行汇总。本质上是在做后序遍历。通常用于寻找二叉树中的最大值、高度等。
3. 相关例题
LeetCode: 257. 二叉树的所有路径, 110. 平衡二叉树, 104. 二叉树的最大深度, 4. 寻找两个正序数组的中位数,
LintCode: 628 · 最大子树,
4. 拓展
1)二叉树
满二叉树:高度为h,由2^h - 1个节点构成的二叉树称为满二叉树。
完全二叉树:由满二叉树引申而来,若一二叉树的深度为h,除第h层外,其他各层的节点数都达到最大个数,第h层的所有节点都连续集中在左边,这就是完全二叉树。
平衡二叉树:任意节点的左右子树的高度差不超过1。
2)Math类的几个常用的static方法
abs() 返回参数的绝对值
min() 返回两个参数中的最小值
max() 返回两个参数中的最大值
3)int值转为double值
可以直接转换,例:
int a = 5;
double b = a;
System.out.print(b); // 控制台打印出5.0