核心框架
数据结构,均是数组和链表的存储--我理解其实就是,类似于二叉树,是用链表的思维,动态规划是用数组进行存储。 关键在于不重不漏的,遍历和访问,比如二叉树,动态,回溯算法
数据结构的存储方式
为什么说只有两种呢、 栈和队列,确实是用数组实现 哈希表,可以用拉链法,链表,或线性探测法,用数组 树:用链表即可实现,通过指针指向其左右子树
数组空间连续,所以可随机访问寻址,实现o1的查找,但是其余操作均是on 链表不连续,但是可通过指针指向,实现o1的插删除
数据结构的操作
线性
for ,while循环
非线性
递归
本质
1, 穷举,为什么,比如对于树类问题,无非就是遍历,或者分解,穷举所有节点,找目标,找到及退出,并且避免重复,需要进行剪枝,动态规划,回溯都是这样
遍历的思维
计算一个树的最大深度就是遍历所有节点,进行求解
分解的思维
同样是计算二叉树最大深度这个问题,你也可以写出下面这样的解法:
// 定义:输入根节点,返回这棵二叉树的最大深度
var maxDepth = function(root) {
if (root == null) {
return 0;
}
// 递归计算左右子树的最大深度
let leftMax = maxDepth(root.left);
let rightMax = maxDepth(root.right);
// 整棵树的最大深度就是左右子树的最大深度加一
let res = Math.max(leftMax, rightMax) + 1;
return res;
};