重学数据结构之框架思维

25 阅读1分钟

核心框架

数据结构,均是数组和链表的存储--我理解其实就是,类似于二叉树,是用链表的思维,动态规划是用数组进行存储。 关键在于不重不漏的,遍历和访问,比如二叉树,动态,回溯算法

数据结构的存储方式

为什么说只有两种呢、 栈和队列,确实是用数组实现 哈希表,可以用拉链法,链表,或线性探测法,用数组 树:用链表即可实现,通过指针指向其左右子树

数组空间连续,所以可随机访问寻址,实现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;
};