Skip to content

Latest commit

 

History

History
 
 

README.md

第7课

what

递归,通俗来讲,指的是函数自己调自己,必须要有中止条件;

how

套用模板:递归中止条件、处理当前层逻辑、下探到下一层;

attention

  1. 避免人肉递归;
  2. 精简步骤,找到最小可重复子单元;
  3. 使用数学归纳法;

第8课

what

本质就是递归,找重复性,以及分解问题和最后组合每个子问题的结果

  1. 最近重复性-分治;
  2. 回溯最优重复性-动态规划;

作业中的思考

这周的作业有点摸不着头脑

二叉树的最近公共祖先

看了一遍题目内容之后,首先联想到了二叉树的定义,指的是树中节点的儿子个数不超过2个的有序树;然后列了下,超哥教给我们的递归模板:递归中止条件、处理当前层逻辑、调用下一层。

当时,我很疑惑,我要怎么找到这两个元素,并且再往上找,找到第一次,两个元素有交集的地方,说实话,我不知道怎么切入点在哪。

Krahets 在答案中提到,一共可以分成两种情况。

  1. 特殊情况:根节点为null或者待找的节点,本身就是root节点,返回root即可;
  2. 一般情况:待找的两个节点分布在root节点的两侧,从顶层开始递归调用

Q:为什么这里省去了一个步骤,就是递归调用钱,先处理本层;

105 从前序与中序遍历序列构造二叉树

回顾一下定义:前序遍历,根左右;中序遍历,左根右。

Q:为什么递归中止条件是这样的:

//1. 首先考虑递归中止条件
if(preorder.length ==0 || inorder.length ==0){
    return null;
}

而不能是这样的

//1. 首先考虑递归中止条件
if(preorder == null || inorder == null){
    return null;
}