# 常见数据结构与算法小结(Java语言描述)
这是一个数据结构和算法笔记本,**书写** 并 **整理**一些常见的数据结构和其对应的相关操作。这其中**每一个类文件都是一个可以单独运行查看结果的main方法类**
,相关的关键描述和想说的话都在代码的注释中。(欢迎一同补充和完善,2019年01月04日00:07:40置为public)
1. 数组
- [搜索二维矩阵](/src/main/java/ds/FindInDoubleArray.java)
- [数组中重复的数据](/src/main/java/ds/RepeatInArray.java)
- [合并两个有序数组](/src/main/java/ds/MergeArray.java)
- [旋转数组](/src/main/java/ds/RotateArray.java)
- [有序数组的平方](/src/main/java/ds/SortedSquares.java)
- [寻找数组的中心索引](/src/main/java/ds/PivotIndex.java)
- [两个数组的交集II](/src/main/java/ds/Intersect.java)
- [递增的三元子序列](/src/main/java/ds/IncreasingTriplet.java)
- [除自身以外数组的乘积](/src/main/java/ds/ProductExceptSelf.java)
- [存在重复元素II](/src/main/java/ds/ContainsNearbyDuplicate.java)
- [存在重复元素III](/src/main/java/ds/ContainsNearbyAlmostDuplicate.java)
- [矩阵置零](/src/main/java/ds/SetZeroes.java)
- [1486.数组异或操作](/src/main/java/ds/array/leetcode1486/Solution.java)
4. 线性数据结构及其对应的常见算法
1. 线性表(分别基于数组和链表实现一遍)
- [线性表的增加(基于顺序存储的物理结构实现)](/src/main/java/ds/ListInsert.java)
- [线性表的删除(基于顺序存储的物理结构实现)](/src/main/java/ds/ListDelete.java)
- [线性表的插入(基于链式存储的物理结构实现)](/src/main/java/ds/LinkInsert.java)
- [线性表的删除(基于链式存储的物理结构实现)](/src/main/java/ds/LinkDelete.java)
- [线性表的创建(基于链式存储的物理结构)头插法和尾插法](/src/main/java/ds/LinkCreate.java)
- [查找线性表中的某一个元素(基于链式存储的物理结构实现)](/src/main/java/ds/LinkGet.java)
2. 栈
- [顺序栈(基于数组实现的栈)](/src/main/java/ds/ArrayStack.java)
- [链式栈(基于链表实现的栈)](/src/main/java/ds/LinkStack.java)
3. 队列
- [顺序队列(基于数组实现的队列)](/src/main/java/ds/ArrayQueue.java)
- [链式队列(基于链表实现的队列)](/src/main/java/ds/LinkQueue.java)
- [循环队列(基于数组成环)](/src/main/java/ds/CircleQueue.java)
5. 递归
- [n的阶乘](/src/main/java/ds/Factorial.java)
- [斐波拉切数列](/src/main/java/ds/FibonacciArray.java)
- [位于第几排问题(递归、非递归分别实现)](/src/main/java/ds/LocationRow.java)
- [n个台阶走法问题(每次可以走1个台阶或者2个台阶)](/src/main/java/ds/OneTwoStep.java)
- [输出指定路径下的所有文件名(递归、非递归分别实现)](/src/main/java/ds/FileSearch.java)
6. 分治
- [x的n次方](/src/main/java/ds/Pow.java)
11. 堆
- [TopK](/src/main/java/ds/KthLargest.java)
- [数组中的第K个最大元素](/src/main/java/ds/FindKthLargest.java)
- [前K个高频元素](/src/main/java/ds/TopKFrequent.java)
- [前K个高频单词](/src/main/java/ds/TopKWord.java)
13. 求数
- [求众数](/src/main/java/ds/MajorityElement.java)
- [加一](/src/main/java/ds/PlusOne.java)
- [Nim游戏](/src/main/java/ds/CanWinNim.java)
- [回文数](/src/main/java/ds/Palindrome.java)
- [猜数字游戏](/src/main/java/ds/GetHint.java)
14. 搜索
- [广度优先搜索](/src/main/java/ds/LevelPrint.java)
- [深度优先搜索](/src/main/java/ds/DepthPrint.java)
15. 图
- [图的表示](/src/main/java/ds/Graph.java)
## LeetCode
1. 反转
- [反转一个数组](/src/main/java/ds/reverse/ReverseArray.java)
- [206.反转链表](/src/main/java/ds/reverse/leetcode206/Solution.java)
- [226.翻转二叉树](/src/main/java/ds/reverse/leetcode226/Solution.java)
- [344.反转字符串](/src/main/java/ds/reverse/leetcode344/Solution.java)
- [541.反转字符串II](/src/main/java/ds/reverse/leetcode541/Solution.java)
- [557.反转字符串中的单词III](/src/main/java/ds/reverse/leetcode557/Solution.java)
- [867.转置矩阵](/src/main/java/ds/reverse/leetcode867/Solution.java)
- [反转单链表的一部分区间](/src/main/java/ds/reverse/ReverseLinkN.java)
2. 二叉树
- [144.二叉树的前序遍历](/src/main/java/ds/tree/leetcode144/Solution.java)
- [二叉树的下一个节点](/src/main/java/ds/tree/NextNodeInTree.java)
- [100.相同的树](/src/main/java/ds/tree/leetcode100/Solution.java)
- [101.对称二叉树](/src/main/java/ds/tree/leetcode101/Solution.java)
- [116.填充每个节点的下一个右侧节点指针](/src/main/java/ds/tree/leetcode116/Solution.java)
- [114.将二叉树展开为链表](/src/main/java/ds/tree/leetcode114/Solution.java)
- [654.最大二叉树](/src/main/java/ds/tree/leetcode654/Solution.java)
- [105.从前序与中序遍历序列构造二叉树](/src/main/java/ds/tree/leetcode105/Solution.java)
- [106.从中序与后序遍历序列构造二叉树](/src/main/java/ds/tree/leetcode106/Solution.java)
- [寻找重复的子树](/src/main/java/ds/tree/FindDuplicateSubtrees.java)
- [297. 二叉树的序列化和反序列化(前序遍历的序列化方式实现)](/src/main/java/ds/tree/leetcode297/preorder/Solution.java)
- [297. 二叉树的序列化和反序列化(后序遍历的序列化方式实现)](/src/main/java/ds/tree/leetcode297/postorder/Solution.java)
- [110.平衡二叉树](/src/main/java/ds/tree/leetcode110/Solution.java)
- [剑指offer 55.二叉树的深度](/src/main/java/ds/tree/targetoffer55/Solution.java)
- [104.二叉树的最大深度](/src/main/java/ds/tree/leetcode104/Solution.java)
- [559.N叉树的最大深度](/src/main/java/ds/tree/leetcode559/Solution.java)
- [111.二叉树的最小深度](/src/main/java/ds/tree/leetcode111/Solution.java)
- [二叉树的节点个数](/src/main/java/ds/tree/leetcode222/TreeNodeCount.java)
- [222.完全二叉树的节点个数](/src/main/java/ds/tree/leetcode222/Solution.java)
- [572.另一个树的子树](/src/main/java/ds/tree/leetcode572/Solution.java)
- [404.左叶子之和](/src/main/java/ds/tree/leetcode404/Solution.java)
- [617.合并二叉树](/src/main/java/ds/tree/leetcode617/Solution.java)
- [236.二叉树的最近公共祖先](/src/main/java/ds/tree/leetcode236/Solution.java)
- [814.二叉树剪枝](/src/main/java/ds/tree/leetcode814/Solution.java)
- [965.单值二叉树](/src/main/java/ds/tree/leetcode965/Solution.java)
3. 二叉查找树
- [700.二叉搜索树中的搜索](/src/main/java/ds/bst/leetcode700/Solution.java)
- [98.验证二叉搜索树](/src/main/java/ds/bst/leetcode98/Solution.java)
- [530.二叉搜索树的最小绝对差](/src/main/java/ds/bst/leetcode530/Solution.java)
- [783.二叉搜索树节点最小距离](/src/main/java/ds/bst/leetcode783/Solution.java)
- [501.二叉搜索树中的众数](/src/main/java/ds/bst/leetcode501/Solution.java)
- [230.二叉搜索树中第K小的元素](/src/main/java/ds/bst/leetcode230/Solution.java)
- [538.把二叉搜索树转换为累加树](/src/main/java/ds/bst/leetcode538/Solution.java)
- [701.二叉搜索树中的插入操作](/src/main/java/ds/bst/leetcode701/Solution.java)
- [450.删除二叉搜索树中的节点](/src/main/java/ds/bst/leetcode450/Solution.java)
- [二叉查找树的插入、遍历、查找、删除、反转](/src/main/java/ds/bst/base/BinarySearchTree.java)
- [235.二叉查找树的最近公共祖先](/src/main/java/ds/bst/leetcode235/Solution.java)
- [剑指offer 36. 二叉搜索树与双向链表](/sr