代码随想录-刷题笔记
该章作为递归基础,记录递归模板
内容:
从前中后序遍历来引入递归
最开始学数据结构的时候,前中后序遍历真的是噩梦!
对于递归不能说一窍不通也可以说是啥也不会。
但后来发现递归完全就是一个栈的模拟 ,每次递归都是一层压栈,然后return相当于是出栈
理解这一层会轻松的写出前序遍历的代码
中序,后序,只需要吧 注释中 "中"的部分放到traversal 中间和后面即可.
void traversal(TreeNode root) {
if(root == null) return;
list.add(root.val); //中
traversal(root.left); //左
treversal(root.right); //右
}
由此观察,我们发现 递归 要包含 三个方面
递归函数 - 包括返回值 ,参数
终止条件 - 否则会无限循环
逻辑代码 - 终止条件之下的代码.
由此,递归模板得出
type funcName (parament) {
if(xxx) return;
xxx;
}
按照以上三方面可以解决一切递归问题。
之后还有回溯,回溯其实只是递归的一种延伸,等到刷那章再说吧
总结:
递归可以延伸的点很多, 包括动态规划,回溯等等, 各方面。
我个人觉得算法应该就分为 动态规划,分之,贪心,多指针这几方面,如果认识不全面之后也会在后文更正。