Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Sign up
Appearance settings

Commit ae64403

Browse files
authored
feat: add solutions to lc problem: No.2458 (#3673)
1 parent 26650aa commit ae64403

File tree

4 files changed

+280
-0
lines changed

4 files changed

+280
-0
lines changed

‎solution/2400-2499/2458.Height of Binary Tree After Subtree Removal Queries/README.md‎

Lines changed: 100 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -289,4 +289,104 @@ func treeQueries(root *TreeNode, queries []int) (ans []int) {
289289

290290
<!-- solution:end -->
291291

292+
<!-- solution:start -->
293+
294+
### 方法二:一次 DFS + 排序
295+
296+
<!-- tabs:start -->
297+
298+
#### TypeScript
299+
300+
```ts
301+
function treeQueries(root: TreeNode | null, queries: number[]): number[] {
302+
const ans: number[] = [];
303+
const levels: Map<number, [number, number][]> = new Map();
304+
const valToLevel = new Map<number, number>();
305+
306+
const dfs = (node: TreeNode | null, level = 0): number => {
307+
if (!node) return level - 1;
308+
309+
const max = Math.max(dfs(node.left, level + 1), dfs(node.right, level + 1));
310+
311+
if (!levels.has(level)) {
312+
levels.set(level, []);
313+
}
314+
levels.get(level)?.push([max, node.val]);
315+
valToLevel.set(node.val, level);
316+
317+
return max;
318+
};
319+
320+
dfs(root, 0);
321+
322+
for (const [_, l] of levels) {
323+
l.sort(([a], [b]) => b - a);
324+
}
325+
326+
for (const q of queries) {
327+
const level = valToLevel.get(q)!;
328+
const maxes = levels.get(level)!;
329+
330+
if (maxes.length === 1) {
331+
ans.push(level - 1);
332+
} else {
333+
const [val0, max0, max1] = [maxes[0][1], maxes[0][0], maxes[1][0]];
334+
const max = val0 === q ? max1 : max0;
335+
ans.push(max);
336+
}
337+
}
338+
339+
return ans;
340+
}
341+
```
342+
343+
#### JavaScript
344+
345+
```js
346+
function treeQueries(root, queries) {
347+
const ans = [];
348+
const levels = new Map();
349+
const valToLevel = new Map();
350+
351+
const dfs = (node, level = 0) => {
352+
if (!node) return level - 1;
353+
354+
const max = Math.max(dfs(node.left, level + 1), dfs(node.right, level + 1));
355+
356+
if (!levels.has(level)) {
357+
levels.set(level, []);
358+
}
359+
levels.get(level)?.push([max, node.val]);
360+
valToLevel.set(node.val, level);
361+
362+
return max;
363+
};
364+
365+
dfs(root, 0);
366+
367+
for (const [_, l] of levels) {
368+
l.sort(([a], [b]) => b - a);
369+
}
370+
371+
for (const q of queries) {
372+
const level = valToLevel.get(q);
373+
const maxes = levels.get(level);
374+
375+
if (maxes.length === 1) {
376+
ans.push(level - 1);
377+
} else {
378+
const [val0, max0, max1] = [maxes[0][1], maxes[0][0], maxes[1][0]];
379+
const max = val0 === q ? max1 : max0;
380+
ans.push(max);
381+
}
382+
}
383+
384+
return ans;
385+
}
386+
```
387+
388+
<!-- tabs:end -->
389+
390+
<!-- solution:end -->
391+
292392
<!-- problem:end -->

‎solution/2400-2499/2458.Height of Binary Tree After Subtree Removal Queries/README_EN.md‎

Lines changed: 100 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -283,4 +283,104 @@ func treeQueries(root *TreeNode, queries []int) (ans []int) {
283283

284284
<!-- solution:end -->
285285

286+
<!-- solution:start -->
287+
288+
### Solution 2: One DFS + Sorting
289+
290+
<!-- tabs:start -->
291+
292+
#### TypeScript
293+
294+
```ts
295+
function treeQueries(root: TreeNode | null, queries: number[]): number[] {
296+
const ans: number[] = [];
297+
const levels: Map<number, [number, number][]> = new Map();
298+
const valToLevel = new Map<number, number>();
299+
300+
const dfs = (node: TreeNode | null, level = 0): number => {
301+
if (!node) return level - 1;
302+
303+
const max = Math.max(dfs(node.left, level + 1), dfs(node.right, level + 1));
304+
305+
if (!levels.has(level)) {
306+
levels.set(level, []);
307+
}
308+
levels.get(level)?.push([max, node.val]);
309+
valToLevel.set(node.val, level);
310+
311+
return max;
312+
};
313+
314+
dfs(root, 0);
315+
316+
for (const [_, l] of levels) {
317+
l.sort(([a], [b]) => b - a);
318+
}
319+
320+
for (const q of queries) {
321+
const level = valToLevel.get(q)!;
322+
const maxes = levels.get(level)!;
323+
324+
if (maxes.length === 1) {
325+
ans.push(level - 1);
326+
} else {
327+
const [val0, max0, max1] = [maxes[0][1], maxes[0][0], maxes[1][0]];
328+
const max = val0 === q ? max1 : max0;
329+
ans.push(max);
330+
}
331+
}
332+
333+
return ans;
334+
}
335+
```
336+
337+
#### JavaScript
338+
339+
```js
340+
function treeQueries(root, queries) {
341+
const ans = [];
342+
const levels = new Map();
343+
const valToLevel = new Map();
344+
345+
const dfs = (node, level = 0) => {
346+
if (!node) return level - 1;
347+
348+
const max = Math.max(dfs(node.left, level + 1), dfs(node.right, level + 1));
349+
350+
if (!levels.has(level)) {
351+
levels.set(level, []);
352+
}
353+
levels.get(level)?.push([max, node.val]);
354+
valToLevel.set(node.val, level);
355+
356+
return max;
357+
};
358+
359+
dfs(root, 0);
360+
361+
for (const [_, l] of levels) {
362+
l.sort(([a], [b]) => b - a);
363+
}
364+
365+
for (const q of queries) {
366+
const level = valToLevel.get(q);
367+
const maxes = levels.get(level);
368+
369+
if (maxes.length === 1) {
370+
ans.push(level - 1);
371+
} else {
372+
const [val0, max0, max1] = [maxes[0][1], maxes[0][0], maxes[1][0]];
373+
const max = val0 === q ? max1 : max0;
374+
ans.push(max);
375+
}
376+
}
377+
378+
return ans;
379+
}
380+
```
381+
382+
<!-- tabs:end -->
383+
384+
<!-- solution:end -->
385+
286386
<!-- problem:end -->
Lines changed: 40 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,40 @@
1+
function treeQueries(root, queries) {
2+
const ans = [];
3+
const levels = new Map();
4+
const valToLevel = new Map();
5+
6+
const dfs = (node, level = 0) => {
7+
if (!node) return level - 1;
8+
9+
const max = Math.max(dfs(node.left, level + 1), dfs(node.right, level + 1));
10+
11+
if (!levels.has(level)) {
12+
levels.set(level, []);
13+
}
14+
levels.get(level)?.push([max, node.val]);
15+
valToLevel.set(node.val, level);
16+
17+
return max;
18+
};
19+
20+
dfs(root, 0);
21+
22+
for (const [_, l] of levels) {
23+
l.sort(([a], [b]) => b - a);
24+
}
25+
26+
for (const q of queries) {
27+
const level = valToLevel.get(q);
28+
const maxes = levels.get(level);
29+
30+
if (maxes.length === 1) {
31+
ans.push(level - 1);
32+
} else {
33+
const [val0, max0, max1] = [maxes[0][1], maxes[0][0], maxes[1][0]];
34+
const max = val0 === q ? max1 : max0;
35+
ans.push(max);
36+
}
37+
}
38+
39+
return ans;
40+
}
Lines changed: 40 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,40 @@
1+
function treeQueries(root: TreeNode | null, queries: number[]): number[] {
2+
const ans: number[] = [];
3+
const levels: Map<number, [number, number][]> = new Map();
4+
const valToLevel = new Map<number, number>();
5+
6+
const dfs = (node: TreeNode | null, level = 0): number => {
7+
if (!node) return level - 1;
8+
9+
const max = Math.max(dfs(node.left, level + 1), dfs(node.right, level + 1));
10+
11+
if (!levels.has(level)) {
12+
levels.set(level, []);
13+
}
14+
levels.get(level)?.push([max, node.val]);
15+
valToLevel.set(node.val, level);
16+
17+
return max;
18+
};
19+
20+
dfs(root, 0);
21+
22+
for (const [_, l] of levels) {
23+
l.sort(([a], [b]) => b - a);
24+
}
25+
26+
for (const q of queries) {
27+
const level = valToLevel.get(q)!;
28+
const maxes = levels.get(level)!;
29+
30+
if (maxes.length === 1) {
31+
ans.push(level - 1);
32+
} else {
33+
const [val0, max0, max1] = [maxes[0][1], maxes[0][0], maxes[1][0]];
34+
const max = val0 === q ? max1 : max0;
35+
ans.push(max);
36+
}
37+
}
38+
39+
return ans;
40+
}

0 commit comments

Comments
(0)

AltStyle によって変換されたページ (->オリジナル) /