你好,我是 `世奇`,笔名 `ConardLi`,欢迎来到 `awesome-coding-js` 。
> 写代码 = 数据结构 + 算法 + ...
> 这里有大量算法和数据结构的JavaScript实现
> 基于不同的考察纬度,同一题目可能同时出现在不同分类中。
练好数据结构和算法,非一日之功💪。欢迎`Star`✨或`Watch`👀我们共同进步。
建议做题之前先阅读我这篇文章:[前端该如何准备数据结构和算法](https://juejin.im/post/5d5b307b5188253da24d3cd1),帮助你更高效的学习。
为了更好的阅读体验可以到:https://www.conardli.top 阅读。
- ⭐⭐:入门
- ⭐⭐⭐:进阶
## JavaScript专题
- [手动实现call、apply、bind](https://www.conardli.top/docs/JavaScript/手动实现call、apply、bind)
- [EventEmitter](https://www.conardli.top/docs/JavaScript/EventEmitter)
- [防抖](https://www.conardli.top/docs/JavaScript/防抖)
- [节流](https://www.conardli.top/docs/JavaScript/节流)
- [浅拷贝和深拷贝](https://www.conardli.top/docs/JavaScript/浅拷贝和深拷贝)
- [数组去重、扁平、最值](https://www.conardli.top/docs/JavaScript/数组去重、扁平、最值)
- [数组乱序-洗牌算法](https://www.conardli.top/docs/JavaScript/数组乱序-洗牌算法)
- [函数柯里化](https://www.conardli.top/docs/JavaScript/函数柯里化)
- [手动实现JSONP](https://www.conardli.top/docs/JavaScript/手动实现JSONP)
- [模拟实现promise](https://www.conardli.top/docs/JavaScript/模拟实现promise)
- [手动实现ES5继承](https://www.conardli.top/docs/JavaScript/手动实现ES5继承)
- [手动实现instanceof](https://www.conardli.top/docs/JavaScript/手动实现instanceof)
- [基于Promise的ajax封装](https://www.conardli.top/docs/JavaScript/基于Promise的ajax封装)
- [单例模式](https://www.conardli.top/docs/JavaScript/单例模式)
- [异步循环打印](https://www.conardli.top/docs/JavaScript/异步循环打印)
- [图片懒加载](https://www.conardli.top/docs/JavaScript/图片懒加载)
## 排序
- [复杂度](https://www.conardli.top/docs/algorithm/排序/复杂度)
- [排序-概览](https://www.conardli.top/docs/algorithm/排序/排序)
- [冒泡排序](https://www.conardli.top/docs/algorithm/排序/冒泡排序)⭐⭐
- [插入排序](https://www.conardli.top/docs/algorithm/排序/插入排序)⭐⭐
- [选择排序](https://www.conardli.top/docs/algorithm/排序/选择排序)⭐⭐
- [堆排序](https://www.conardli.top/docs/algorithm/排序/堆排序)⭐⭐⭐
- [快速排序](https://www.conardli.top/docs/algorithm/排序/快速排序)⭐⭐⭐
- [归并排序](https://www.conardli.top/docs/algorithm/排序/归并排序)⭐⭐⭐
## 二叉树
- [二叉树-概览](https://www.conardli.top/docs/dataStructure/二叉树/二叉树)
- [二叉树的基本操作](https://www.conardli.top/docs/dataStructure/二叉树/二叉树的基本操作)⭐⭐
- [二叉树的中序遍历](https://www.conardli.top/docs/dataStructure/二叉树/二叉树的中序遍历)⭐⭐
- [二叉树的前序遍历](https://www.conardli.top/docs/dataStructure/二叉树/二叉树的前序遍历)⭐⭐
- [二叉树的后序遍历](https://www.conardli.top/docs/dataStructure/二叉树/二叉树的后序遍历)⭐⭐
- [重建二叉树](https://www.conardli.top/docs/dataStructure/二叉树/重建二叉树)⭐⭐
- [求二叉树的遍历](https://www.conardli.top/docs/dataStructure/二叉树/重建二叉树.md/#求二叉树的遍历)⭐⭐
- [对称的二叉树](https://www.conardli.top/docs/dataStructure/二叉树/对称的二叉树)⭐⭐
- [二叉树的镜像](https://www.conardli.top/docs/dataStructure/二叉树/二叉树的镜像)⭐⭐
- [二叉搜索树的第k个节点](https://www.conardli.top/docs/dataStructure/二叉树/二叉搜索树的第k个节点)⭐⭐
- [二叉搜索树的后序遍历](https://www.conardli.top/docs/dataStructure/二叉树/二叉搜索树的后序遍历)⭐⭐
- [二叉树的最大深度](https://www.conardli.top/docs/dataStructure/二叉树/二叉树的最大深度)⭐⭐
- [二叉树的最小深度](https://www.conardli.top/docs/dataStructure/二叉树/二叉树的最小深度)⭐⭐
- [平衡二叉树](https://www.conardli.top/docs/dataStructure/二叉树/平衡二叉树)⭐⭐
- [不分行从上到下打印二叉树](https://www.conardli.top/docs/dataStructure/二叉树/从上到下打印二叉树.md/#题目1-不分行从上到下打印)⭐⭐
- [把二叉树打印成多行](https://www.conardli.top/docs/dataStructure/二叉树/从上到下打印二叉树.md/#题目2-把二叉树打印成多行)⭐⭐
- [二叉树中和为某一值的路径](https://www.conardli.top/docs/dataStructure/二叉树/二叉树中和为某一值的路径)⭐⭐⭐
- [二叉搜索树与双向链表](https://www.conardli.top/docs/dataStructure/二叉树/二叉搜索树与双向链表)⭐⭐⭐
- [按之字形顺序打印二叉树](https://www.conardli.top/docs/dataStructure/二叉树/从上到下打印二叉树.md/#题目3-按之字形顺序打印二叉树)⭐⭐⭐
- [序列化二叉树](https://www.conardli.top/docs/dataStructure/二叉树/序列化二叉树)⭐⭐⭐
- [二叉树的下一个节点](https://www.conardli.top/docs/dataStructure/二叉树/二叉树的下一个节点)⭐⭐⭐
- [树的子结构](https://www.conardli.top/docs/dataStructure/二叉树/树的子结构)⭐⭐⭐
## 链表
- [链表-概览](https://www.conardli.top/docs/dataStructure/链表/链表)
- [删除链表中的节点or重复的节点](https://www.conardli.top/docs/dataStructure/链表/删除链表中的节点or重复的节点)⭐⭐
- [从尾到头打印链表](https://www.conardli.top/docs/dataStructure/链表/从尾到头打印链表)⭐⭐
- [链表倒数第k个节点](https://www.conardli.top/docs/dataStructure/链表/链表倒数第k个节点)⭐⭐
- [反转链表](https://www.conardli.top/docs/dataStructure/链表/反转链表)⭐⭐
- [复杂链表的复制](https://www.conardli.top/docs/dataStructure/链表/复杂链表的复制)⭐⭐
- [两个链表的第一个公共节点](https://www.conardli.top/docs/dataStructure/链表/两个链表的第一个公共节点)⭐⭐
- [圈圈中最后剩下的数字](https://www.conardli.top/docs/dataStructure/链表/圈圈中最后剩下的数字)⭐⭐
- [链表中环的入口节点](https://www.conardli.top/docs/dataStructure/链表/链表中环的入口节点)⭐⭐⭐
## 字符串
- [替换空格](https://www.conardli.top/docs/dataStructure/字符串/替换空格)⭐⭐
- [表示数值的字符串](https://www.conardli.top/docs/dataStructure/字符串/表示数值的字符串)⭐⭐
- [字符流中第一个不重复的字符](https://www.conardli.top/docs/dataStructure/字符串/字符流中第一个不重复的字符)⭐⭐
- [字符串的排列](https://www.conardli.top/docs/dataStructure/字符串/字符串的排列)⭐⭐
- [字符串翻转](https://www.conardli.top/docs/dataStructure/字符串/字符串翻转)⭐⭐
- [正则表达式匹配](https://www.conardli.top/docs/dataStructure/字符串/正则表达式匹配)⭐⭐⭐
## 栈和队列
- [栈和队列-概览](https://www.conardli.top/docs/dataStructure/栈和队列/栈和队列)
- [用两个栈实现队列](https://www.conardli.top/docs/dataStructure/栈和队列/用两个栈实现队列)⭐⭐
- [包含min函数的栈](https://www.conardli.top/docs/dataStructure/栈和队列/包含min函数的栈)⭐⭐
- [栈的压入弹出序列](https://www.conardli.top/docs/dataStructure/栈和队列/栈的压入弹出序列)⭐⭐
- [滑动窗口的最大值](https://www.conardli.top/docs/dataStructure/栈和队列/滑动窗口的最大值)⭐⭐⭐
## 数组
- [数组-概览](https://www.conardli.top/docs/dataStructure/数组/数组)
- [调整数组顺序使奇数位于偶数前面](https://www.conardli.top/docs/dataStructure/数组/调整数组顺序使奇数位于偶数前面) ⭐⭐
- [在排序数组中查找数字](https://www.conardli.top/docs/d