二叉树总结
二叉树的结构
stauct TreeNode {
int val;
TreeNode* left;
TreeNode* right;
}
二叉树的递归函数分析
二叉树的递归函数当做只有一个根节点,一个左子树,一个右节点的数去看,这看着是个废话, 其实很重要
要明白的定义:
- 二叉树的节点定义
- 每一层的含义
- 每向下一层含义
- 根节点到叶子节点的路径的含义
(未完待续)
回溯
什么是回溯
二叉树先序遍历怎么能从左节点到达有节点就是需要回溯
动态规划
个人意见是应该加一步状态分析
状态分析:
- 列出所有的状态,将状态归纳后就可以,定义dp数组
- 状态转移,归纳状态也就是递推公式是什么
动态规划5步曲
确定dp数组(dp table)以及下标的含义
确定递推公式
dp数组如何初始化
确定遍历顺序
举例推导dp数组
单调栈
通常是一维数组,要寻找任一个元素的右边或者左边第一个比自己大或者小的元素的位置,此时我们就要想到可以用单调栈了。
单调栈的用处
单调栈中存储的值
单调栈中存储的是已经遍历过的数据
然后栈顶元素和当前数据做比较,就可以求出对应逻辑的值
单调栈的个人总结
- 单调栈,在画图的的时候,把栈口方向朝向右边,会更好理解。
- 栈中的元素就是遍历过的,没有处理过的元素。
- 因为都是在找和栈口元素有大小关系,当前遍历的元素还没处理,所以当前遍历到的元素是一定是要入栈的
- 找到符合条件的就处理栈口的元素,所以不需要判断栈中是递增还是递减,直接处理就好
- 判断栈是单调递增还是单调递减
就看要求的是比栈顶元素大还是小,求得是比栈顶元素大的就是单调递增的,求得是比栈顶元素小的就是递减的( 大就是递增,小就是递减)