Skip to content

Commit 1712466

Browse files
committed
feat: leetcode 515
1 parent cc860bf commit 1712466

File tree

8 files changed

+138
-1
lines changed

8 files changed

+138
-1
lines changed

README.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@
22

33
<p align="center">
44
<!-- TOPICS COUNT START -->
5-
<img src="https://img.shields.io/badge/-进度:411-green" alt="进度:411">
5+
<img src="https://img.shields.io/badge/-进度:412-green" alt="进度:412">
66
<!-- TOPICS COUNT END -->
77
<a href="./assets/docs/TOPICS.md"><img src="https://img.shields.io/badge/-题库目录-blue" alt="题库目录"></a>
88
<a href="./assets/docs/CATEGORIES.md"><img src="https://img.shields.io/badge/-题库分类-red" alt="题库分类"></a>

assets/data/categories.json

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2774,6 +2774,12 @@
27742774
"path": "./problemset/find-bottom-left-tree-value/README.md",
27752775
"difficulty": "中等"
27762776
},
2777+
{
2778+
"id": "515",
2779+
"title": "在每个树行中找最大值",
2780+
"path": "./problemset/find-largest-value-in-each-tree-row/README.md",
2781+
"difficulty": "中等"
2782+
},
27772783
{
27782784
"id": "589",
27792785
"title": "N 叉树的前序遍历",
@@ -3255,6 +3261,12 @@
32553261
"path": "./problemset/find-bottom-left-tree-value/README.md",
32563262
"difficulty": "中等"
32573263
},
3264+
{
3265+
"id": "515",
3266+
"title": "在每个树行中找最大值",
3267+
"path": "./problemset/find-largest-value-in-each-tree-row/README.md",
3268+
"difficulty": "中等"
3269+
},
32583270
{
32593271
"id": "589",
32603272
"title": "N 叉树的前序遍历",

assets/data/topics.json

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3009,6 +3009,16 @@
30093009
"url": "https://leetcode.cn/problems/find-bottom-left-tree-value/",
30103010
"path": "./problemset/find-bottom-left-tree-value/README.md"
30113011
},
3012+
{
3013+
"id": "515",
3014+
"title": {
3015+
"cn": "在每个树行中找最大值",
3016+
"en": "find-largest-value-in-each-tree-row"
3017+
},
3018+
"difficulty": "中等",
3019+
"url": "https://leetcode.cn/problems/find-largest-value-in-each-tree-row/",
3020+
"path": "./problemset/find-largest-value-in-each-tree-row/README.md"
3021+
},
30123022
{
30133023
"id": "521",
30143024
"title": {

assets/docs/CATEGORIES.md

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -516,6 +516,7 @@
516516
| 464. [我能赢吗](../../problemset/can-i-win/README.md) | 中等 |
517517
| 508. [出现次数最多的子树元素和](../../problemset/most-frequent-subtree-sum/README.md) | 中等 |
518518
| 513. [找树左下角的值](../../problemset/find-bottom-left-tree-value/README.md) | 中等 |
519+
| 515. [在每个树行中找最大值](../../problemset/find-largest-value-in-each-tree-row/README.md) | 中等 |
519520
| 589. [N 叉树的前序遍历](../../problemset/n-ary-tree-preorder-traversal/README.md) | 简单 |
520521
| 590. [N 叉树的后序遍历](../../problemset/n-ary-tree-postorder-traversal/README.md) | 简单 |
521522
| 606. [根据二叉树创建字符串](../../problemset/construct-string-from-binary-tree/README.md) | 简单 |
@@ -617,6 +618,7 @@
617618
| 450. [删除二叉搜索树中的节点](../../problemset/delete-node-in-a-bst/README.md) | 中等 |
618619
| 508. [出现次数最多的子树元素和](../../problemset/most-frequent-subtree-sum/README.md) | 中等 |
619620
| 513. [找树左下角的值](../../problemset/find-bottom-left-tree-value/README.md) | 中等 |
621+
| 515. [在每个树行中找最大值](../../problemset/find-largest-value-in-each-tree-row/README.md) | 中等 |
620622
| 589. [N 叉树的前序遍历](../../problemset/n-ary-tree-preorder-traversal/README.md) | 简单 |
621623
| 606. [根据二叉树创建字符串](../../problemset/construct-string-from-binary-tree/README.md) | 简单 |
622624
| 653. [两数之和 IV - 输入 BST](../../problemset/two-sum-iv-input-is-a-bst/README.md) | 简单 |

assets/docs/TOPICS.md

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -602,6 +602,8 @@
602602

603603
[513. 找树左下角的值](../../problemset/find-bottom-left-tree-value/README.md)
604604

605+
[515. 在每个树行中找最大值](../../problemset/find-largest-value-in-each-tree-row/README.md)
606+
605607
[521. 最长特殊序列](../../problemset/longest-uncommon-subsequence/README.md)
606608

607609
[532. 数组中的 k-diff 数对](../../problemset/k-diff-pairs-in-an-array/README.md)
Lines changed: 59 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,59 @@
1+
# 在每个树行中找最大值
2+
3+
> 难度:中等
4+
>
5+
> https://leetcode.cn/problems/find-largest-value-in-each-tree-row/
6+
7+
## 题目
8+
9+
给定一棵二叉树的根节点 `root` ,请找出该二叉树中每一层的最大值。
10+
11+
### 示例
12+
13+
#### 示例 1:
14+
15+
![image](https://user-images.githubusercontent.com/54696834/175475977-a1e1956a-b6a7-43da-949d-8422ee855673.png)
16+
17+
```
18+
输入: root = [1,3,2,5,3,null,9]
19+
输出: [1,3,9]
20+
```
21+
22+
#### 示例 2:
23+
24+
```
25+
输入: root = [1,2,3]
26+
输出: [1,3]
27+
```
28+
29+
## 解题
30+
31+
```ts
32+
/**
33+
* 广度优先搜索
34+
* @desc 时间复杂度 O(N) 空间复杂度 O(N)
35+
* @param root
36+
* @returns
37+
*/
38+
export function largestValues(root: TreeNode | null): number[] {
39+
const ans: number[] = []
40+
41+
if (root) {
42+
const queue: TreeNode[] = [root]
43+
44+
while (queue.length) {
45+
let len = queue.length
46+
let maxVal = -Number.MAX_VALUE
47+
while (len--) {
48+
const node = queue.pop()!
49+
maxVal = Math.max(maxVal, node.val)
50+
node.left && queue.unshift(node.left)
51+
node.right && queue.unshift(node.right)
52+
}
53+
ans.push(maxVal)
54+
}
55+
}
56+
57+
return ans
58+
}
59+
```
Lines changed: 23 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,23 @@
1+
import { describe, expect, it } from 'vitest'
2+
import { largestValues } from '.'
3+
import type { TreeNode } from '~/utils/treeNode'
4+
import { createTreeNode } from '~/utils/treeNode'
5+
6+
describe('在每个树行中找最大值', () => {
7+
testCase(largestValues)
8+
})
9+
10+
function testCase(fn: (root: TreeNode | null) => number[]) {
11+
it.each([
12+
[
13+
[1, 3, 2, 5, 3, null, 9],
14+
[1, 3, 9],
15+
],
16+
[
17+
[1, 2, 3],
18+
[1, 3],
19+
],
20+
])('示例%#', (root, expected) => {
21+
expect(fn(createTreeNode(root))).toStrictEqual(expected)
22+
})
23+
}
Lines changed: 29 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,29 @@
1+
import type { TreeNode } from '~/utils/treeNode'
2+
3+
/**
4+
* 广度优先搜索
5+
* @desc 时间复杂度 O(N) 空间复杂度 O(N)
6+
* @param root
7+
* @returns
8+
*/
9+
export function largestValues(root: TreeNode | null): number[] {
10+
const ans: number[] = []
11+
12+
if (root) {
13+
const queue: TreeNode[] = [root]
14+
15+
while (queue.length) {
16+
let len = queue.length
17+
let maxVal = -Number.MAX_VALUE
18+
while (len--) {
19+
const node = queue.pop()!
20+
maxVal = Math.max(maxVal, node.val)
21+
node.left && queue.unshift(node.left)
22+
node.right && queue.unshift(node.right)
23+
}
24+
ans.push(maxVal)
25+
}
26+
}
27+
28+
return ans
29+
}

0 commit comments

Comments
 (0)