auto commit

This commit is contained in:
CyC2018 2018-03-09 13:14:49 +08:00
parent 9e4c3d79b5
commit 43cee1d82b

View File

@ -36,7 +36,7 @@
* [哈希表](#哈希表)
* [字符串](#字符串)
* [数组与矩阵](#数组与矩阵)
* [1\~n 分布](#1\~n-分布)
* [1-n 分布](#1-n-分布)
* [有序矩阵](#有序矩阵)
* [链表](#链表)
* [](#树)
@ -3472,7 +3472,7 @@ public void moveZeroes(int[] nums) {
}
```
### 1\~n 分布
### 1-n 分布
**一个数组元素在 [1, n] 之间,其中一个数被替换为另一个数,找出丢失的数和重复的数**
@ -3855,6 +3855,23 @@ public TreeNode invertTree(TreeNode root) {
[Leetcode : 617. Merge Two Binary Trees (Easy)](https://leetcode.com/problems/merge-two-binary-trees/description/)
```html
Input:
Tree 1 Tree 2
1 2
/ \ / \
3 2 1 3
/ \ \
5 4 7
Output:
Merged tree:
3
/ \
4 5
/ \ \
5 4 7
```
```java
public TreeNode mergeTrees(TreeNode t1, TreeNode t2) {
if(t1 == null && t2 == null) return null;
@ -3871,7 +3888,19 @@ public TreeNode mergeTrees(TreeNode t1, TreeNode t2) {
[Leetcdoe : 112. Path Sum (Easy)](https://leetcode.com/problems/path-sum/description/)
题目描述:路径和定义为从 root 到 leaf 的所有节点的和
```html
Given the below binary tree and sum = 22,
5
/ \
4 8
/ / \
11 13 4
/ \ \
7 2 1
return true, as there exist a root-to-leaf path 5->4->11->2 which sum is 22.
```
路径和定义为从 root 到 leaf 的所有节点的和
```java
public boolean hasPathSum(TreeNode root, int sum) {
@ -3885,9 +3914,25 @@ public boolean hasPathSum(TreeNode root, int sum) {
[Leetcode : 437. Path Sum III (Easy)](https://leetcode.com/problems/path-sum-iii/description/)
题目描述:路径不一定以 root 开头并以 leaf 结尾,但是必须连续
```html
root = [10,5,-3,3,2,null,11,3,-2,null,1], sum = 8
pathSumStartWithRoot() 方法统计以某个节点开头的路径个数。
10
/ \
5 -3
/ \ \
3 2 11
/ \ \
3 -2 1
Return 3. The paths that sum to 8 are:
1. 5 -> 3
2. 5 -> 2 -> 1
3. -3 -> 11
```
路径不一定以 root 开头并以 leaf 结尾,但是必须连续
```java
public int pathSum(TreeNode root, int sum) {
@ -3909,6 +3954,14 @@ private int pathSumStartWithRoot(TreeNode root, int sum){
[Leetcode : 101. Symmetric Tree (Easy)](https://leetcode.com/problems/symmetric-tree/description/)
```html
1
/ \
2 2
/ \ / \
3 4 4 3
```
```java
public boolean isSymmetric(TreeNode root) {
if(root == null) return true;
@ -3927,7 +3980,15 @@ private boolean isSymmetric(TreeNode t1, TreeNode t2){
[Leetcode : 110. Balanced Binary Tree (Easy)](https://leetcode.com/problems/balanced-binary-tree/description/)
题目描述:左右子树高度差是否都小于等于 1
```html
3
/ \
9 20
/ \
15 7
```
平衡树左右子树高度差都小于等于 1
```java
private boolean result = true;
@ -3950,7 +4011,7 @@ public int maxDepth(TreeNode root) {
[Leetcode : 111. Minimum Depth of Binary Tree (Easy)](https://leetcode.com/problems/minimum-depth-of-binary-tree/description/)
题目描述:树的根节点到叶子节点的最小长度
树的根节点到叶子节点的最小路径长度
```java
public int minDepth(TreeNode root) {
@ -3966,24 +4027,63 @@ public int minDepth(TreeNode root) {
[Leetcode : 404. Sum of Left Leaves (Easy)](https://leetcode.com/problems/sum-of-left-leaves/description/)
```html
3
/ \
9 20
/ \
15 7
There are two left leaves in the binary tree, with values 9 and 15 respectively. Return 24.
```
```java
public int sumOfLeftLeaves(TreeNode root) {
if(root == null) return 0;
if(isLeaf(root.left)) return root.left.val + sumOfLeftLeaves(root.right);
if(root == null) {
return 0;
}
if(isLeaf(root.left)) {
return root.left.val + sumOfLeftLeaves(root.right);
}
return sumOfLeftLeaves(root.left) + sumOfLeftLeaves(root.right);
}
private boolean isLeaf(TreeNode node){
if(node == null) return false;
if(node == null) {
return false;
}
return node.left == null && node.right == null;
}
```
**修剪一棵树**
**修剪二叉查找树**
[Leetcode : 669. Trim a Binary Search Tree (Easy)](https://leetcode.com/problems/trim-a-binary-search-tree/description/)
题目描述:只保留值在 L \~ R 之间的节点
```html
Input:
3
/ \
0 4
\
2
/
1
L = 1
R = 3
Output:
3
/
2
/
1
```
二叉查找树BST根节点大于等于左子树所有节点小于等于右子树所有节点。
只保留值在 L \~ R 之间的节点
```java
public TreeNode trimBST(TreeNode root, int L, int R) {
@ -4000,6 +4100,20 @@ public TreeNode trimBST(TreeNode root, int L, int R) {
[Leetcode : 572. Subtree of Another Tree (Easy)](https://leetcode.com/problems/subtree-of-another-tree/description/)
```html
Given tree s:
3
/ \
4 5
/ \
1 2
Given tree t:
4
/ \
1 2
Return true, because t has the same structure and node values with a subtree of s.
```
```java
public boolean isSubtree(TreeNode s, TreeNode t) {
if(s == null && t == null) return true;
@ -4020,8 +4134,6 @@ private boolean isSame(TreeNode s, TreeNode t){
[Leetcode : 108. Convert Sorted Array to Binary Search Tree (Easy)](https://leetcode.com/problems/convert-sorted-array-to-binary-search-tree/description/)
二叉查找树BST根节点大于等于左子树所有节点小于等于右子树所有节点。
```java
public TreeNode sortedArrayToBST(int[] nums) {
return toBST(nums, 0, nums.length - 1);
@ -4040,15 +4152,19 @@ private TreeNode toBST(int[] nums, int sIdx, int eIdx){
**两节点的最长路径**
```html
1
Input:
1
/ \
2 3
2 3
/ \
4 5
Return 3, which is the length of the path [4,2,1,3] or [5,2,1,3].
```
[Leetcode : 543. Diameter of Binary Tree (Easy)](https://leetcode.com/problems/diameter-of-binary-tree/description/)
```java
private int max = 0;
@ -4058,9 +4174,7 @@ public int diameterOfBinaryTree(TreeNode root) {
}
private int depth(TreeNode root) {
if (root == null) {
return 0;
}
if (root == null) return 0;
int leftDepth = depth(root.left);
int rightDepth = depth(root.right);
max = Math.max(max, leftDepth + rightDepth);
@ -4074,9 +4188,9 @@ private int depth(TreeNode root) {
```html
Input:
2
2
/ \
2 5
2 5
/ \
5 7
@ -4099,10 +4213,21 @@ public int findSecondMinimumValue(TreeNode root) {
}
```
**寻找两个节点的最近公共祖先**
**二叉查找树的最近公共祖先**
[Leetcode : 235. Lowest Common Ancestor of a Binary Search Tree (Easy)](https://leetcode.com/problems/lowest-common-ancestor-of-a-binary-search-tree/description/)
```html
_______6______
/ \
___2__ ___8__
/ \ / \
0 _4 7 9
/ \
3 5
For example, the lowest common ancestor (LCA) of nodes 2 and 8 is 6. Another example is LCA of nodes 2 and 4 is 2, since a node can be a descendant of itself according to the LCA definition.
```
```java
public TreeNode lowestCommonAncestor(TreeNode root, TreeNode p, TreeNode q) {
if(root.val > p.val && root.val > q.val) return lowestCommonAncestor(root.left, p, q);
@ -4111,10 +4236,21 @@ public TreeNode lowestCommonAncestor(TreeNode root, TreeNode p, TreeNode q) {
}
```
**最近公共祖先**
**二叉树的最近公共祖先**
[Leetcode : 236. Lowest Common Ancestor of a Binary Tree (Medium) ](https://leetcode.com/problems/lowest-common-ancestor-of-a-binary-tree/description/)
```html
_______3______
/ \
___5__ ___1__
/ \ / \
6 _2 0 8
/ \
7 4
For example, the lowest common ancestor (LCA) of nodes 5 and 1 is 3. Another example is LCA of nodes 5 and 4 is 5, since a node can be a descendant of itself according to the LCA definition.
```
```java
public TreeNode lowestCommonAncestor(TreeNode root, TreeNode p, TreeNode q) {
if (root == null || root == p || root == q) return root;