Skip to content

Commit 22c8dc6

Browse files
committedFeb 4, 2021
[0204]ADD:LC-many
1 parent 1a3d4d1 commit 22c8dc6

5 files changed

+230
-0
lines changed
 

‎readme.md

+9
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,10 @@
1818
[[20200201]647. 回文子串-Medium](动态规划/区间序列/647.%20回文子串-Medium.md)
1919
[[20200201]111. 二叉树的最小深度-Easy](树/111.%20二叉树的最小深度-Easy.md)
2020
[[20210203]752. 打开转盘锁-Medium](回溯法/BFS/752.%20打开转盘锁-Medium.md)
21+
[[20210204]107. 二叉树的层序遍历 II-Easy](树/107.%20二叉树的层序遍历%20II-Easy.md)
22+
[[20210204]637. 二叉树的层平均值-Easy](树/637.%20二叉树的层平均值-Easy.md)
23+
[[20210204]429. N 叉树的层序遍历-Medium](树/429.%20N%20叉树的层序遍历-Medium.md)
24+
[[20210204]1161. 最大层内元素和-Medium](1161.%20最大层内元素和-Medium.md)
2125
## 2020.12
2226
[[20201201]34. 在排序数组中查找元素的第一个和最后一个位置-Medium](数组/34.%20在排序数组中查找元素的第一个和最后一个位置-Medium.md)
2327
[[20201202]292. Nim 游戏-Easy](动态规划/292.%20Nim%20游戏-Easy.md)
@@ -87,18 +91,23 @@
8791
# 按类别归类
8892
##
8993
[102. 二叉树的层序遍历 - Medium](./树/102.%20二叉树的层序遍历%20-%20Medium.md)
94+
[107. 二叉树的层序遍历 II-Easy](树/107.%20二叉树的层序遍历%20II-Easy.md)
9095
[111. 二叉树的最小深度-Easy](树/111.%20二叉树的最小深度-Easy.md)
9196
[129. 求根到叶子节点数字之和-Medium](树/129.%20求根到叶子节点数字之和-Medium.md)
9297
[144. 二叉树的前序遍历-Medium](树/144.%20二叉树的前序遍历-Medium.md)
9398
[235. 二叉搜索树的最近公共祖先-Easy](./树/235.%20二叉搜索树的最近公共祖先-Easy.md)
9499
[297. 二叉树的序列化与反序列化-Hard](树/297.%20二叉树的序列化与反序列化-Hard.md)
100+
[429. N 叉树的层序遍历-Medium](树/429.%20N%20叉树的层序遍历-Medium.md)
95101
[449. 序列化和反序列化二叉搜索树-Medium](树/449.%20序列化和反序列化二叉搜索树-Medium.md)
96102
[501. 二叉搜索树中的众数 - Easy](501.%20二叉搜索树中的众数%20-%20Easy.md)
97103
[589. N叉树的前序遍历 - Easy](./树/589.%20N叉树的前序遍历%20-%20Easy.md)
98104
[617. 合并二叉树 - Easy](./树/617.%20合并二叉树%20-%20Easy.md)
105+
[637. 二叉树的层平均值-Easy](树/637.%20二叉树的层平均值-Easy.md)
99106
[897. 递增顺序查找树 - Easy](./树/897.%20递增顺序查找树%20-%20Easy.md)
107+
[1161. 最大层内元素和-Medium](1161.%20最大层内元素和-Medium.md)
100108
[剑指 Offer 26. 树的子结构-Medium](./树/剑指%20Offer%2026.%20树的子结构-Medium.md)
101109
[剑指 Offer 54. 二叉搜索树的第k大节点 - Easy](./树/剑指%20Offer%2054.%20二叉搜索树的第k大节点%20-%20Easy.md)
110+
102111

103112
## 数组和双指针
104113
[15. 三数之和 - Medium](双指针/15.%20三数之和%20-%20Medium.md)
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,51 @@
1+
# [Description](https://leetcode-cn.com/problems/binary-tree-level-order-traversal)
2+
3+
给你一个二叉树,请你返回其按 层序遍历 得到的节点值。 (即逐层地,从左到右访问所有节点)。
4+
5+
 
6+
7+
示例:
8+
```python
9+
二叉树:[3,9,20,null,null,15,7],
10+
11+
3
12+
/ \
13+
9 20
14+
/ \
15+
15 7
16+
返回其层序遍历结果:
17+
18+
[
19+
[3],
20+
[9,20],
21+
[15,7]
22+
]
23+
```
24+
25+
# Solution
26+
- 时间复杂度:$O(n)$
27+
- 空间复杂度:$O(n)$
28+
29+
```python
30+
class Solution:
31+
def levelOrder(self, root: TreeNode) -> List[List[int]]:
32+
if not root:
33+
return []
34+
else:
35+
ans, stack = [], [root]
36+
while stack:
37+
layer_node, layer_val = [], []
38+
while stack:
39+
current = stack.pop(0)
40+
layer_val.append(current.val)
41+
42+
if current.left:
43+
layer_node.append(current.left)
44+
if current.right:
45+
layer_node.append(current.right)
46+
47+
stack.extend(layer_node)
48+
ans.append(layer_val)
49+
50+
return ans
51+
```
+66
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,66 @@
1+
# [Description](https://leetcode-cn.com/problems/maximum-level-sum-of-a-binary-tree)
2+
给你一个二叉树的根节点 root。设根节点位于二叉树的第 1 层,而根节点的子节点位于第 2 层,依此类推。
3+
4+
请你找出层内元素之和 最大 的那几层(可能只有一层)的层号,并返回其中 最小 的那个。
5+
6+
 
7+
8+
示例 1:
9+
10+
![](https://assets.leetcode-cn.com/aliyun-lc-upload/uploads/2019/08/17/capture.jpeg)
11+
```python
12+
输入:root = [1,7,0,7,-8,null,null]
13+
输出:2
14+
解释:
15+
1 层各元素之和为 1
16+
2 层各元素之和为 7 + 0 = 7
17+
3 层各元素之和为 7 + -8 = -1
18+
所以我们返回第 2 层的层号,它的层内元素之和最大。
19+
```
20+
示例 2:
21+
```python
22+
输入:root = [989,null,10250,98693,-89388,null,null,null,-32127]
23+
输出:2
24+
```
25+
26+
提示:
27+
28+
- 树中的节点数介于 1 和 10^4 之间
29+
- $-10^5 <= node.val <= 10^5$
30+
31+
# Solution
32+
- 需要注意节点的取值可为负数。
33+
- 时间复杂度:$O(n)$
34+
- 空间复杂度:$O(n)$
35+
36+
```python
37+
class Solution:
38+
def maxLevelSum(self, root: TreeNode) -> int:
39+
if not root:
40+
return 0
41+
queue = [root]
42+
tmp_index = 1
43+
index = 0
44+
final_total = float('-inf')
45+
46+
while queue:
47+
total = 0
48+
tmp_length = len(queue)
49+
50+
for i in range(tmp_length):
51+
tmp_node = queue.pop(0)
52+
total += tmp_node.val
53+
54+
if tmp_node.left:
55+
queue.append(tmp_node.left)
56+
if tmp_node.right:
57+
queue.append(tmp_node.right)
58+
59+
if total > final_total:
60+
final_total = total
61+
index = tmp_index
62+
63+
tmp_index += 1
64+
65+
return index
66+
```
+52
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,52 @@
1+
# [Description](https://leetcode-cn.com/problems/n-ary-tree-level-order-traversal)
2+
给定一个 N 叉树,返回其节点值的层序遍历。(即从左到右,逐层遍历)。
3+
4+
树的序列化输入是用层序遍历,每组子节点都由 null 值分隔(参见示例)。
5+
6+
 
7+
8+
示例 1:
9+
![](https://assets.leetcode.com/uploads/2018/10/12/narytreeexample.png)
10+
```python
11+
输入:root = [1,null,3,2,4,null,5,6]
12+
输出:[[1],[3,2,4],[5,6]]
13+
```
14+
示例 2:
15+
![](https://assets.leetcode.com/uploads/2019/11/08/sample_4_964.png)
16+
```python
17+
输入:root = [1,null,2,3,4,5,null,null,6,7,null,8,null,9,10,null,null,11,null,12,null,13,null,null,14]
18+
输出:[[1],[2,3,4,5],[6,7,8,9,10],[11,12,13],[14]]
19+
```
20+
21+
提示:
22+
23+
- 树的高度不会超过 1000
24+
- 树的节点总数在 [0, 10^4] 之间
25+
26+
27+
# Solution
28+
- 时间复杂度:$O(n)$
29+
- 空间复杂度:$O(n)$
30+
31+
```python
32+
class Solution:
33+
def levelOrder(self, root: 'Node') -> List[List[int]]:
34+
if not root:
35+
return []
36+
queue = [root]
37+
ans = []
38+
39+
while queue:
40+
tmp_list = []
41+
tmp_length = len(queue)
42+
43+
for i in range(tmp_length):
44+
tmp_node = queue.pop(0)
45+
tmp_list.append(tmp_node.val)
46+
47+
for node in tmp_node.children:
48+
queue.append(node)
49+
50+
ans.append(tmp_list)
51+
return ans
52+
```
+52
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,52 @@
1+
# [Description](https://leetcode-cn.com/problems/average-of-levels-in-binary-tree)
2+
3+
给定一个非空二叉树, 返回一个由每层节点平均值组成的数组。
4+
5+
6+
示例 1:
7+
```python
8+
输入:
9+
3
10+
/ \
11+
9 20
12+
/ \
13+
15 7
14+
输出:[3, 14.5, 11]
15+
解释:
16+
0 层的平均值是 3 , 第1层是 14.5 , 第2层是 11 。因此返回 [3, 14.5, 11] 。
17+
```
18+
19+
提示:
20+
21+
- 节点值的范围在32位有符号整数范围内。
22+
23+
# Solution
24+
- 时间复杂度:$O(n)$
25+
- 空间复杂度:$O(n)$
26+
27+
28+
```python
29+
class Solution:
30+
def averageOfLevels(self, root: TreeNode) -> List[float]:
31+
if not root:
32+
return []
33+
queue = [root]
34+
ans = []
35+
36+
while queue:
37+
total, length = 0, 0
38+
tmp_length = len(queue)
39+
40+
for i in range(tmp_length):
41+
tmp_node = queue.pop(0)
42+
total += tmp_node.val
43+
length += 1
44+
45+
if tmp_node.left:
46+
queue.append(tmp_node.left)
47+
if tmp_node.right:
48+
queue.append(tmp_node.right)
49+
50+
ans.append(total/length)
51+
return ans
52+
```

0 commit comments

Comments
 (0)
Please sign in to comment.