递归实现遍历法&分治法

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值