Skip to content

Commit c08df22

Browse files
Update
1 parent 01d1f4a commit c08df22

8 files changed

+145
-8
lines changed

README.md

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -97,6 +97,7 @@
9797
|[0098.验证二叉搜索树](https://github.com/youngyangyang04/leetcode/blob/master/problems/0098.验证二叉搜索树.md) ||中等|**递归**|
9898
|[0100.相同的树](https://github.com/youngyangyang04/leetcode/blob/master/problems/0100.相同的树.md) ||简单|**递归** |
9999
|[0101.对称二叉树](https://github.com/youngyangyang04/leetcode/blob/master/problems/0101.对称二叉树.md) ||简单|**递归** **迭代/队列/栈**|
100+
|[0102.二叉树的层序遍历](https://github.com/youngyangyang04/leetcode/blob/master/problems/0102.二叉树的层序遍历.md) ||中等|**广度优先搜索/队列**|
100101
|[0104.二叉树的最大深度](https://github.com/youngyangyang04/leetcode/blob/master/problems/0104.二叉树的最大深度.md) ||简单|**递归** **迭代/队列/BFS**|
101102
|[0110.平衡二叉树](https://github.com/youngyangyang04/leetcode/blob/master/problems/0110.平衡二叉树.md) ||简单|**递归**|
102103
|[0111.二叉树的最小深度](https://github.com/youngyangyang04/leetcode/blob/master/problems/0111.二叉树的最小深度.md) ||简单|**递归** **队列/BFS**|
@@ -105,12 +106,14 @@
105106
|[0145.二叉树的后序遍历](https://github.com/youngyangyang04/leetcode/blob/master/problems/0145.二叉树的后序遍历.md) ||困难|**递归** **迭代/栈**|
106107
|[0151.翻转字符串里的单词](https://github.com/youngyangyang04/leetcode/blob/master/problems/0151.翻转字符串里的单词.md) |字符串 |中等|**模拟/双指针**|
107108
|[0155.最小栈](https://github.com/youngyangyang04/leetcode/blob/master/problems/0155.最小栈.md) ||简单|****|
109+
|[0199.二叉树的右视图](https://github.com/youngyangyang04/leetcode/blob/master/problems/0199.二叉树的右视图.md) |二叉树 |中等|**广度优先遍历/队列**|
108110
|[0202.快乐数](https://github.com/youngyangyang04/leetcode/blob/master/problems/0202.快乐数.md) |哈希表 |简单|**哈希**|
109111
|[0203.移除链表元素](https://github.com/youngyangyang04/leetcode/blob/master/problems/0203.移除链表元素.md) |链表 |简单|**模拟** **虚拟头结点**|
110112
|[0205.同构字符串](https://github.com/youngyangyang04/leetcode/blob/master/problems/0205.同构字符串.md) |哈希表 |简单| **哈希**|
111113
|[0206.翻转链表](https://github.com/youngyangyang04/leetcode/blob/master/problems/0206.翻转链表.md) |链表 |简单| **模拟** **递归**|
112114
|[0209.长度最小的子数组](https://github.com/youngyangyang04/leetcode/blob/master/problems/0209.长度最小的子数组.md) |数组 |中等| **暴力** **滑动窗口**|
113115
|[0219.存在重复元素II](https://github.com/youngyangyang04/leetcode/blob/master/problems/0219.存在重复元素II.md) | 哈希表 |简单| **哈希** |
116+
|[0222.完全二叉树的节点个数](https://github.com/youngyangyang04/leetcode/blob/master/problems/0222.完全二叉树的节点个数.md) ||简单| **递归** |
114117
|[0225.用队列实现栈](https://github.com/youngyangyang04/leetcode/blob/master/problems/0225.用队列实现栈.md) | 队列 |简单| **队列** |
115118
|[0232.用栈实现队列](https://github.com/youngyangyang04/leetcode/blob/master/problems/0232.用栈实现队列.md) ||简单| **** |
116119
|[0237.删除链表中的节点](https://github.com/youngyangyang04/leetcode/blob/master/problems/0237.删除链表中的节点.md) |链表 |简单| **原链表移除** **添加虚拟节点** 递归|

problems/0094.二叉树的中序遍历.md

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -66,8 +66,10 @@ public:
6666
if (node != NULL) {
6767
st.pop(); // 将该节点弹出,避免重复操作,下面再将右中左节点添加到栈中
6868
if (node->right) st.push(node->right); // 添加右节点
69+
6970
st.push(node); // 添加中节点
7071
st.push(NULL); // 中节点访问过,但是还没有处理,需要做一下标记。
72+
7173
if (node->left) st.push(node->left); // 添加左节点
7274
} else {
7375
st.pop(); // 将空节点弹出
Lines changed: 34 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,34 @@
1+
## 题目地址
2+
https://leetcode-cn.com/problems/binary-tree-level-order-traversal/
3+
4+
## 思路
5+
6+
使用队列实现广度优先遍历
7+
8+
## C++代码
9+
10+
```
11+
class Solution {
12+
public:
13+
vector<vector<int>> levelOrder(TreeNode* root) {
14+
queue<TreeNode*> que;
15+
if (root != NULL) que.push(root);
16+
vector<vector<int>> result;
17+
while (!que.empty()) {
18+
int size = que.size();
19+
vector<int> vec;
20+
for (int i = 0; i < size; i++) {// 这里一定要使用固定大小size,不要使用que.size()
21+
TreeNode* node = que.front();
22+
que.pop();
23+
vec.push_back(node->val);
24+
if (node->left) que.push(node->left);
25+
if (node->right) que.push(node->right);
26+
}
27+
result.push_back(vec);
28+
}
29+
return result;
30+
}
31+
};
32+
```
33+
34+
> 更多算法干货文章持续更新,可以微信搜索「代码随想录」第一时间围观,关注后,回复「Java」「C++」 「python」「简历模板」「数据结构与算法」等等,就可以获得我多年整理的学习资料。

problems/0145.二叉树的后序遍历.md

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -48,10 +48,10 @@ public:
4848
st.pop();
4949
if (node != NULL) result.push_back(node->val);
5050
else continue;
51-
st.push(node->left);
51+
st.push(node->left); // 相对于前序遍历,这更改一下入栈顺序
5252
st.push(node->right);
5353
}
54-
reverse(result.begin(), result.end());
54+
reverse(result.begin(), result.end()); // 将结果反转之后就是左右中的顺序了
5555
return result;
5656
}
5757
};
@@ -63,7 +63,6 @@ public:
6363
```
6464
class Solution {
6565
public:
66-
6766
vector<int> postorderTraversal(TreeNode* root) {
6867
vector<int> result;
6968
stack<TreeNode*> st;
@@ -72,10 +71,11 @@ public:
7271
TreeNode* node = st.top();
7372
if (node != NULL) {
7473
st.pop();
75-
st.push(node);
74+
st.push(node); // 中
7675
st.push(NULL);
77-
if (node->right) st.push(node->right);
78-
if (node->left) st.push(node->left);
76+
77+
if (node->right) st.push(node->right); // 右
78+
if (node->left) st.push(node->left); // 左
7979
8080
} else {
8181
st.pop();
Lines changed: 32 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,32 @@
1+
## 题目地址
2+
https://leetcode-cn.com/problems/binary-tree-right-side-view/
3+
4+
## 思路
5+
6+
广度优先搜索模板题目,层序遍历的时候,将每一层的最后元素放入result数组中
7+
8+
## C++代码
9+
10+
```
11+
class Solution {
12+
public:
13+
vector<int> rightSideView(TreeNode* root) {
14+
queue<TreeNode*> que;
15+
if (root != NULL) que.push(root);
16+
vector<int> result;
17+
while (!que.empty()) {
18+
int size = que.size();
19+
for (int i = 0; i < size; i++) {
20+
TreeNode* node = que.front();
21+
que.pop();
22+
if (i == (size - 1)) result.push_back(node->val);//将每一层的最后元素放入result数组中
23+
if (node->left) que.push(node->left);
24+
if (node->right) que.push(node->right);
25+
}
26+
}
27+
return result;
28+
}
29+
};
30+
```
31+
32+
> 更多算法干货文章持续更新,可以微信搜索「代码随想录」第一时间围观,关注后,回复「Java」「C++」 「python」「简历模板」「数据结构与算法」等等,就可以获得我多年整理的学习资料。

problems/0202.快乐数.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -39,5 +39,5 @@ public:
3939
}
4040
};
4141
```
42-
> 更过算法干货文章持续更新,可以微信搜索「代码随想录」第一时间围观,关注后,回复「Java」「C++」 「python」「简历模板」「数据结构与算法」等等,就可以获得我多年整理的学习资料。
42+
> 更多算法干货文章持续更新,可以微信搜索「代码随想录」第一时间围观,关注后,回复「Java」「C++」 「python」「简历模板」「数据结构与算法」等等,就可以获得我多年整理的学习资料。
4343
Lines changed: 46 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,46 @@
1+
## 题目地址
2+
https://leetcode-cn.com/problems/count-complete-tree-nodes/
3+
4+
## 思路
5+
6+
递归题目
7+
8+
## C++代码
9+
10+
### 递归
11+
```
12+
class Solution {
13+
public:
14+
int countNodes(TreeNode* root) {
15+
if (root == NULL) return 0;
16+
return 1 + countNodes(root->left) + countNodes(root->right);
17+
}
18+
};
19+
```
20+
21+
### 迭代-广度优先
22+
23+
```
24+
class Solution {
25+
public:
26+
int countNodes(TreeNode* root) {
27+
queue<TreeNode*> que;
28+
if (root != NULL) que.push(root);
29+
int count = 0;
30+
int result = 0;
31+
while (!que.empty()) {
32+
int size = que.size();
33+
for (int i = 0; i < size; i++) {
34+
TreeNode* node = que.front();
35+
que.pop();
36+
result++;
37+
if (node->left) que.push(node->left);
38+
if (node->right) que.push(node->right);
39+
}
40+
}
41+
return result;
42+
}
43+
};
44+
```
45+
46+
> 更多算法干货文章持续更新,可以微信搜索「代码随想录」第一时间围观,关注后,回复「Java」「C++」 「python」「简历模板」「数据结构与算法」等等,就可以获得我多年整理的学习资料。

problems/0226.翻转二叉树.md

Lines changed: 21 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,10 +3,11 @@ https://leetcode-cn.com/problems/invert-binary-tree/
33

44
## 思路
55

6-
递归的过程,交换左右节点。
6+
写递归算法的时候,要想一想是采用前中后序那种遍历方式
77

88
## C++代码
99

10+
### 递归(前序遍历)
1011
```
1112
class Solution {
1213
public:
@@ -19,5 +20,24 @@ public:
1920
}
2021
};
2122
```
23+
### 迭代法(前序遍历)
2224

25+
```
26+
class Solution {
27+
public:
28+
TreeNode* invertTree(TreeNode* root) {
29+
if (root == NULL) return root;
30+
stack<TreeNode*> st;
31+
st.push(root);
32+
while(!st.empty()) {
33+
TreeNode* node = st.top();
34+
st.pop();
35+
swap(node->left, node->right);
36+
if(node->left) st.push(node->left);
37+
if(node->right) st.push(node->right);
38+
}
39+
return root;
40+
}
41+
};
42+
```
2343
> 更多算法干货文章持续更新,可以微信搜索「代码随想录」第一时间围观,关注后,回复「Java」「C++」 「python」「简历模板」「数据结构与算法」等等,就可以获得我多年整理的学习资料。

0 commit comments

Comments
 (0)