本文为按照labuladong算法小结 自行学习的总结。意为记录自己学习练习的顺序,用于日后回顾浏览。目录中附上各章labuladong的原文链接,并会附上自我练习的代码及理解。
1.1、链表
1.1.1、单链表的六大解题套路
1、合并两个有序链表:Leetcode 21.合并两个有序链表merge-two-sorted-lists合并链表
2、合并K个有序链表:Leetcode 23. 合并K个升序链表merge-k-sorted-lists(合并k路有序链表 最小堆)
3、寻找单链表的倒数第K个节点: Leetcode 19.删除链表的倒数第 N 个结点 remove-nth-node-from-end-of-list(链表,快慢指针变种应用)
4、寻找单链表的中点:Leetcode 876. 链表的中间结点
5、判断单链表是否包含环并找出环起点:Leetcode 41. 环形链表(简单)linked-list-cycle——链表、判断是否循环链表、快慢指针、 Leetcode 142. 环形链表 II(中等)linked-list-cycle-ii——链表,找出开始循环节点
6、判断两个单链表是否相交并找出交点:Leetcode 160.相交链表
1.1.2、递归反转链表的一部分
1、反转链表,递归反转链表,反转链表前n,反转链表的一部分:Leetcode [92][206]. 反转链表ii&i-输入一个链表,反转链表后,输出链表的所有元素
1.1.3、如何 K 个一组反转链表
1.1.4、如何判断回文链表
1、原始思路
2、进阶思路:Leetcode [234] 回文链表 回文 链表
1.1.5、个人补充
1.2、二叉树
1.2.1、纲领篇
介绍二叉树前中后序遍历的基本框架和解题思路:Leetcode 104. 二叉树的最大深度、 Leetcode 543. 二叉树的直径 diameter-of-binary-tree
1.2.2、二叉树一
1.2.3、二叉树二
- Leetcode [654] 最大二叉树 &[105] 从前序与中序遍历序列构造二叉树 & [106] 从中序与后序遍历序列构造二叉树
- Leetcode 889. 根据前序和后序遍历构造二叉树 construct-binary-tree-from-preorder-and-postorder-traversal
1.2.4、二叉树三
1.2.5、二叉搜索树一
- 内容:利用二叉搜索树中序遍历有序的特性,正向或者逆向遍历,来进行元素的查找
- 230. BST第K小的元素(中等): Leetcode 230. 二叉搜索树中第K小的元素 kth-smallest-element-in-a-bst&& 538. 把二叉搜索树转换为累加树 convert-bst-to-greater-tree && 1038. binary-search-tree-to-greater-sum-tree
- 538. 二叉搜索树转化累加树(中等):
- 1038. BST转累加树(中等):
1.2.6、二叉搜索树二
- 内容:判断 BST 的合法性、增、删、查
- 题目:450. 删除二叉搜索树中的节点(中等)、701. 二叉搜索树中的插入操作(中等)、700. 二叉搜索树中的搜索(简单)、98. 验证二叉搜索树(中等)
- 解答: Leetcode 450. 删除二叉搜索树中的节点(中等)、701. 二叉搜索树中的插入操作(中等)、700. 二叉搜索树中的搜索(简单)、98. 验证二叉搜索树(中等)
1.2.7、二叉搜索树三
- 内容:构建二叉搜索树,使用递归的方法遍历所有可能的组合。
- 题目:96. 不同的二叉搜索树(简单);95. 不同的二叉搜索树II(中等)
- 解法:Leetcode 96. 不同的二叉搜索树(简单) 95. 不同的二叉搜索树II(中等)
1.2.8、美团面试题:二叉树的后续遍历巧妙应用
- 内容:利用后序遍历可以在处理时获取到所有信息的特性,来避免重复递归。在后序遍历时同时进行bst判断、记录最大最小值、记录累加值
- 题目:1373. 二叉搜索子树的最大键值和(困难)
- 解法:Leetcode 1373. 二叉搜索子树的最大键值和(困难)
1.2.9、二叉树的序列化
- 内容:介绍二叉树序列化与反序列化的代码框架,最简单易懂的是前序,后序较为难懂
- 题目:297. 二叉树的序列化和反序列化(困难)
- 题解: Leetcode 297. 二叉树的序列化和反序列化(困难)
1.2.10、二叉树叶子结点遍历
- 内容:通过介绍一个int&list混合结构遍历的方法,引出叶子结点的遍历。但是没有太多参考价值
- 题目:341. 扁平化嵌套列表迭代器(中等)
- 题解: Leetcode 341. 扁平化嵌套列表迭代器(中等)
1.2.11、二叉树最近公共祖先LCA
- 内容:git rebase使用LCA原理实现。LCA可以使用后序遍历框架来写
- 题目:236. 二叉树的最近公共祖先(中等)
- 题解:236. 二叉树的最近公共祖先
1.2.12、完全二叉树的节点
- 内容:结合普通二叉树以及满二叉树的方法,完成计算完全二叉树节点,logn*logn
- 题目:222. 完全二叉树的节点个数(中等)
- 题解:Leetcode 222. 完全二叉树的节点个数(中等)
1.2.13、二叉树的迭代框架
- 内容:提炼出的二叉树迭代方式的遍历框架,可用于前中后序遍历
- 题解:Leetcode 144. 二叉树的前序遍历 && 94.二叉树的中序遍历 && 145. 二叉树的后续遍历
1.3.1、图论基础
- 内容:图一般使用邻接表或者邻接矩阵表示,图的遍历可以参考多叉树的遍历。对于有环图,则可以添加visited来辅助
- 题目:797. 所有可能的路径(中等)
- 题解:Leetcode 797. 所有可能的路径(中等)
1.3.2、拓扑排序
- 内容:介绍如何判断图是否有环,如何对图进行拓扑排序,即根据依赖关系顺序排序
- 题目:207. 课程表、210. 课程表 II
- 题解:Leetcode 207. 课程表 && 210. 课程表 II
1.3.3、