auto commit

This commit is contained in:
CyC2018
2020-11-17 00:32:18 +08:00
parent f5ad47b470
commit 7e61fc1360
380 changed files with 2371 additions and 46715 deletions

View File

@ -1,48 +1,50 @@
# Leetcode 题解 -
<!-- GFM-TOC -->
* [递归](#递归)
* [1. 树的高度](#1-树的高度)
* [2. 平衡](#2-平衡)
* [3. 两节点的最长路径](#3-两节点的最长路径)
* [4. 翻转树](#4-翻转树)
* [5. 归并两棵](#5-归并两棵)
* [6. 判断路径和是否等于一个数](#6-判断路径和是否等于一个数)
* [7. 统计路径和等于一个数的路径数量](#7-统计路径和等于一个数的路径数量)
* [8. 子树](#8-子树)
* [9. 的对称](#9-的对称)
* [10. 最小路径](#10-最小路径)
* [11. 统计左叶子节点的和](#11-统计左叶子节点的和)
* [12. 相同节点值的最大路径长度](#12-相同节点值的最大路径长度)
* [13. 间隔遍历](#13-间隔遍历)
* [14. 找出二叉树中第二小的节点](#14-找出二叉树中第二小的节点)
* [层次遍历](#层次遍历)
* [1. 一棵树每层节点的平均数](#1-一棵树每层节点的平均数)
* [2. 得到左下角的节点](#2-得到左下角的节点)
* [前中后序遍历](#前中后序遍历)
* [1. 非递归实现二叉树的前序遍历](#1-非递归实现二叉树的前序遍历)
* [2. 非递归实现二叉树的序遍历](#2-非递归实现二叉树的序遍历)
* [3. 非递归实现二叉树的序遍历](#3-非递归实现二叉树的序遍历)
* [BST](#bst)
* [1. 修剪二叉查找树](#1-修剪二叉查找树)
* [2. 寻找二叉查找树的第 k 个元素](#2-寻找二叉查找树的第-k-个元素)
* [3. 二叉查找树每个节点的值都加上比它大的节点的值](#3-二叉查找树每个节点的值都加上比它大的节点的值)
* [4. 二叉查找树的最近公共祖先](#4-二叉查找树的最近公共祖先)
* [5. 二叉树的最近公共祖先](#5-二叉树的最近公共祖先)
* [6. 从有序数组中构造二叉查找树](#6-从有序数组中构造二叉查找树)
* [7. 根据有序链表构造平衡的二叉查找树](#7-根据有序链表构造平衡的二叉查找树)
* [8. 在二叉查找树中寻找两个节点使它们的和为一个给定值](#8-在二叉查找树中寻找两个节点使它们的和为一个给定值)
* [9. 在二叉查找树中找两个节点之差的最小绝对](#9-在二叉查找树中找两个节点之差的最小绝对)
* [10. 寻找二叉查找树中出现次数最多的](#10-寻找二叉查找树中出现次数最多的)
* [Trie](#trie)
* [1. 实现一个 Trie](#1-实现一个-trie)
* [2. 实现一个 Trie用来求前缀和](#2-实现一个-trie用来求前缀和)
* [Leetcode 题解 - ](#leetcode-题解---)
* [递归](#递归)
* [1. 的高度](#1-的高度)
* [2. 平衡树](#2-平衡树)
* [3. 两节点的最长路径](#3-两节点的最长路径)
* [4. 翻转](#4-翻转)
* [5. 归并两棵树](#5-归并两棵树)
* [6. 判断路径和是否等于一个数](#6-判断路径和是否等于一个数)
* [7. 统计路径和等于一个数的路径数量](#7-统计路径和等于一个数的路径数量)
* [8. ](#8-)
* [9. 树的对称](#9-树的对称)
* [10. 最小路径](#10-最小路径)
* [11. 统计左叶子节点的和](#11-统计左叶子节点的和)
* [12. 相同节点值的最大路径长度](#12-相同节点值的最大路径长度)
* [13. 间隔遍历](#13-间隔遍历)
* [14. 找出二叉树中第二小的节点](#14-找出二叉树中第二小的节点)
* [层次遍历](#层次遍历)
* [1. 一棵树每层节点的平均数](#1-一棵树每层节点的平均数)
* [2. 得到左下角的节点](#2-得到左下角的节点)
* [前中后序遍历](#前中后序遍历)
* [1. 非递归实现二叉树的序遍历](#1-非递归实现二叉树的序遍历)
* [2. 非递归实现二叉树的序遍历](#2-非递归实现二叉树的序遍历)
* [3. 非递归实现二叉树的中序遍历](#3-非递归实现二叉树的中序遍历)
* [BST](#bst)
* [1. 修剪二叉查找树](#1-修剪二叉查找树)
* [2. 寻找二叉查找树的第 k 个元素](#2-寻找二叉查找树的第-k-个元素)
* [3. 二叉查找树每个节点的值都加上比它大的节点的值](#3-二叉查找树每个节点的值都加上比它大的节点的值)
* [4. 二叉查找树的最近公共祖先](#4-二叉查找树的最近公共祖先)
* [5. 二叉树的最近公共祖先](#5-二叉树的最近公共祖先)
* [6. 从有序数组中构造二叉查找树](#6-从有序数组中构造二叉查找树)
* [7. 根据有序链表构造平衡的二叉查找树](#7-根据有序链表构造平衡的二叉查找树)
* [8. 在二叉查找树中找两个节点使它们的和为一个给定](#8-在二叉查找树中找两个节点使它们的和为一个给定)
* [9. 二叉查找树中查找两个节点之差的最小绝对](#9-二叉查找树中查找两个节点之差的最小绝对)
* [10. 寻找二叉查找树中出现次数最多的值](#10-寻找二叉查找树中出现次数最多的值)
* [Trie](#trie)
* [1. 实现一个 Trie](#1-实现一个-trie)
* [2. 实现一个 Trie用来求前缀和](#2-实现一个-trie用来求前缀和)
<!-- GFM-TOC -->
# 递归
## 递归
一棵树要么是空树要么有两个指针每个指针指向一棵树树是一种递归结构很多树的问题可以使用递归来处理
## 1. 树的高度
### 1. 树的高度
104\. Maximum Depth of Binary Tree (Easy)
@ -55,7 +57,7 @@ public int maxDepth(TreeNode root) {
}
```
## 2. 平衡树
### 2. 平衡树
110\. Balanced Binary Tree (Easy)
@ -88,7 +90,7 @@ public int maxDepth(TreeNode root) {
}
```
## 3. 两节点的最长路径
### 3. 两节点的最长路径
543\. Diameter of Binary Tree (Easy)
@ -123,7 +125,7 @@ private int depth(TreeNode root) {
}
```
## 4. 翻转树
### 4. 翻转树
226\. Invert Binary Tree (Easy)
@ -139,7 +141,7 @@ public TreeNode invertTree(TreeNode root) {
}
```
## 5. 归并两棵树
### 5. 归并两棵树
617\. Merge Two Binary Trees (Easy)
@ -174,7 +176,7 @@ public TreeNode mergeTrees(TreeNode t1, TreeNode t2) {
}
```
## 6. 判断路径和是否等于一个数
### 6. 判断路径和是否等于一个数
Leetcdoe : 112. Path Sum (Easy)
@ -204,7 +206,7 @@ public boolean hasPathSum(TreeNode root, int sum) {
}
```
## 7. 统计路径和等于一个数的路径数量
### 7. 统计路径和等于一个数的路径数量
437\. Path Sum III (Easy)
@ -246,7 +248,7 @@ private int pathSumStartWithRoot(TreeNode root, int sum) {
}
```
## 8. 子树
### 8. 子树
572\. Subtree of Another Tree (Easy)
@ -299,7 +301,7 @@ private boolean isSubtreeWithRoot(TreeNode s, TreeNode t) {
}
```
## 9. 树的对称
### 9. 树的对称
101\. Symmetric Tree (Easy)
@ -327,7 +329,7 @@ private boolean isSymmetric(TreeNode t1, TreeNode t2) {
}
```
## 10. 最小路径
### 10. 最小路径
111\. Minimum Depth of Binary Tree (Easy)
@ -345,7 +347,7 @@ public int minDepth(TreeNode root) {
}
```
## 11. 统计左叶子节点的和
### 11. 统计左叶子节点的和
404\. Sum of Left Leaves (Easy)
@ -374,7 +376,7 @@ private boolean isLeaf(TreeNode node){
}
```
## 12. 相同节点值的最大路径长度
### 12. 相同节点值的最大路径长度
687\. Longest Univalue Path (Easy)
@ -409,7 +411,7 @@ private int dfs(TreeNode root){
}
```
## 13. 间隔遍历
### 13. 间隔遍历
337\. House Robber III (Medium)
@ -435,7 +437,7 @@ public int rob(TreeNode root) {
}
```
## 14. 找出二叉树中第二小的节点
### 14. 找出二叉树中第二小的节点
671\. Second Minimum Node In a Binary Tree (Easy)
@ -468,11 +470,11 @@ public int findSecondMinimumValue(TreeNode root) {
}
```
# 层次遍历
## 层次遍历
使用 BFS 进行层次遍历不需要使用两个队列来分别存储当前层的节点和下一层的节点因为在开始遍历一层的节点时当前队列中的节点数就是当前层的节点数只要控制遍历这么多节点数就能保证这次遍历的都是当前层的节点
## 1. 一棵树每层节点的平均数
### 1. 一棵树每层节点的平均数
637\. Average of Levels in Binary Tree (Easy)
@ -499,7 +501,7 @@ public List<Double> averageOfLevels(TreeNode root) {
}
```
## 2. 得到左下角的节点
### 2. 得到左下角的节点
513\. Find Bottom Left Tree Value (Easy)
@ -533,7 +535,7 @@ public int findBottomLeftValue(TreeNode root) {
}
```
# 前中后序遍历
## 前中后序遍历
```html
1
@ -582,7 +584,7 @@ void dfs(TreeNode root) {
}
```
## 1. 非递归实现二叉树的前序遍历
### 1. 非递归实现二叉树的前序遍历
144\. Binary Tree Preorder Traversal (Medium)
@ -604,13 +606,13 @@ public List<Integer> preorderTraversal(TreeNode root) {
}
```
## 2. 非递归实现二叉树的后序遍历
### 2. 非递归实现二叉树的后序遍历
145\. Binary Tree Postorder Traversal (Medium)
[Leetcode](https://leetcode.com/problems/binary-tree-postorder-traversal/description/) / [力扣](https://leetcode-cn.com/problems/binary-tree-postorder-traversal/description/)
前序遍历为 root -> left -> right后序遍历为 left -> right -> root可以修改前序遍历成为 root -> right -> left那么这个顺序就和后序遍历正好相反
前序遍历为 root -\> left -\> right后序遍历为 left -\> right -\> root可以修改前序遍历成为 root -\> right -\> left那么这个顺序就和后序遍历正好相反
```java
public List<Integer> postorderTraversal(TreeNode root) {
@ -629,7 +631,7 @@ public List<Integer> postorderTraversal(TreeNode root) {
}
```
## 3. 非递归实现二叉树的中序遍历
### 3. 非递归实现二叉树的中序遍历
94\. Binary Tree Inorder Traversal (Medium)
@ -654,13 +656,13 @@ public List<Integer> inorderTraversal(TreeNode root) {
}
```
# BST
## BST
二叉查找树BST根节点大于等于左子树所有节点小于等于右子树所有节点
二叉查找树中序遍历有序
## 1. 修剪二叉查找树
### 1. 修剪二叉查找树
669\. Trim a Binary Search Tree (Easy)
@ -702,7 +704,7 @@ public TreeNode trimBST(TreeNode root, int L, int R) {
}
```
## 2. 寻找二叉查找树的第 k 个元素
### 2. 寻找二叉查找树的第 k 个元素
230\. Kth Smallest Element in a BST (Medium)
@ -748,7 +750,7 @@ private int count(TreeNode node) {
}
```
## 3. 把二叉查找树每个节点的值都加上比它大的节点的值
### 3. 把二叉查找树每个节点的值都加上比它大的节点的值
Convert BST to Greater Tree (Easy)
@ -787,7 +789,7 @@ private void traver(TreeNode node) {
}
```
## 4. 二叉查找树的最近公共祖先
### 4. 二叉查找树的最近公共祖先
235\. Lowest Common Ancestor of a Binary Search Tree (Easy)
@ -813,7 +815,7 @@ public TreeNode lowestCommonAncestor(TreeNode root, TreeNode p, TreeNode q) {
}
```
## 5. 二叉树的最近公共祖先
### 5. 二叉树的最近公共祖先
236\. Lowest Common Ancestor of a Binary Tree (Medium)
@ -840,7 +842,7 @@ public TreeNode lowestCommonAncestor(TreeNode root, TreeNode p, TreeNode q) {
}
```
## 6. 从有序数组中构造二叉查找树
### 6. 从有序数组中构造二叉查找树
108\. Convert Sorted Array to Binary Search Tree (Easy)
@ -861,7 +863,7 @@ private TreeNode toBST(int[] nums, int sIdx, int eIdx){
}
```
## 7. 根据有序链表构造平衡的二叉查找树
### 7. 根据有序链表构造平衡的二叉查找树
109\. Convert Sorted List to Binary Search Tree (Medium)
@ -904,7 +906,7 @@ private ListNode preMid(ListNode head) {
}
```
## 8. 在二叉查找树中寻找两个节点使它们的和为一个给定值
### 8. 在二叉查找树中寻找两个节点使它们的和为一个给定值
653\. Two Sum IV - Input is a BST (Easy)
@ -950,7 +952,7 @@ private void inOrder(TreeNode root, List<Integer> nums) {
}
```
## 9. 在二叉查找树中查找两个节点之差的最小绝对值
### 9. 在二叉查找树中查找两个节点之差的最小绝对值
530\. Minimum Absolute Difference in BST (Easy)
@ -990,7 +992,7 @@ private void inOrder(TreeNode node) {
}
```
## 10. 寻找二叉查找树中出现次数最多的值
### 10. 寻找二叉查找树中出现次数最多的值
501\. Find Mode in Binary Search Tree (Easy)
@ -1043,13 +1045,13 @@ private void inOrder(TreeNode node, List<Integer> nums) {
}
```
# Trie
## Trie
<div align="center"> <img src="https://cs-notes-1256109796.cos.ap-guangzhou.myqcloud.com/5c638d59-d4ae-4ba4-ad44-80bdc30f38dd.jpg"/> </div><br>
Trie又称前缀树或字典树用于判断字符串是否存在或者是否具有某种字符串前缀
## 1. 实现一个 Trie
### 1. 实现一个 Trie
208\. Implement Trie (Prefix Tree) (Medium)
@ -1113,7 +1115,7 @@ class Trie {
}
```
## 2. 实现一个 Trie用来求前缀和
### 2. 实现一个 Trie用来求前缀和
677\. Map Sum Pairs (Medium)
@ -1180,10 +1182,3 @@ class MapSum {
}
```
<div align="center"><img width="320px" src="https://cs-notes-1256109796.cos.ap-guangzhou.myqcloud.com/githubio/公众号二维码-2.png"></img></div>